在Docker容器中调试nodejs app

时间:2017-03-13 17:27:32

标签: javascript node.js debugging docker visual-studio-code

我第一次使用Docker设置了Nodejs项目,而且我在将调试器附加到应用程序时遇到了问题。

这是我的码头文件:

FROM node:latest
LABEL Name=graphql Version=0.1.0 

# Create app directory
RUN mkdir -p /graphql
WORKDIR /graphql

# Install app dependencies
COPY package.json /graphql
RUN npm install -g gulp
RUN npm install

# Bundle app source
COPY . /graphql

EXPOSE 3000
EXPOSE 5858
EXPOSE 8000

CMD gulp

并撰写一篇:

version: '2'

services:
  graphql:
    image: graphql:latest
    container_name: apollo-graphql
    build:
      context: .
      dockerfile: dockerfile
    environment:
      NODE_ENV: development
    tty: true
    ports:
      - 3000:3000
      - 5858:5858
      - 8000:8000
    volumes:
      - .:/graphql
    ## set your startup file here
    command: gulp

gulp任务当前正在启动nodemon,如下所示:

gulp.task('serve', ['bundle'], () => {

    stream = nodemon({
        execMap: {
            js: 'node --debug=5858'
        },
        script: 'build/server.bundle.js',
        verbose: true
    })

这似乎运行得很好,包括输出声明:Debugger listening on 127.0.0.1:5858 但是,我似乎无法连接到它。我使用的是VScode,我的启动配置文件如下:

"name": "Attach",
"type": "node",
"request": "attach",
"address": "127.0.0.1",
"port": 5858,
"localRoot": "${workspaceRoot}/graphql/",
"remoteRoot": "/graphql/",

即使我将--debug标志更改为--inspect以使用新协议,我仍然无法在Chrome devtools中打开它。

我已经看过一些教程,而那些教程几乎就是我在这里做的,但我在这里错过了一些东西吗? 我还看到StackOverflow关于使用node-inspect运行第二个容器的一些建议,但是我不想走那条路,因为我试图保持简单。事实上,这种设置似乎适用于那些教程,所以为什么它不适用于我?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我已多次验证此配置,无法重现问题

这是我的整个.vscode / launch.json文件

{
    // Use IntelliSense to learn about possible Node.js debug attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "attach",
            "name": "Attach to Docker container",
            "port": 5858,
            "address": "127.0.0.1",
            "localRoot": "${workspaceRoot}",
            "remoteRoot": "/var/app"
        }
    ]
}

我唯一能想到的是确保你正在运行"附加" VS Code中的调试模式。

否则,我一无所知。它似乎对我有用。