網站搜尋

node.js - Node VS Code 除錯器在 Docker 中顯示未綁定的斷點


經過多次探索,我讓 ts 調試器對特定端口工作,並且在使用 nodemon 進行即時重載時還需要編譯 .ts。我在不使用 docker 運行應用程式時也遇到了相同的未綁定斷點,但修改啟動文件後,它就能工作了。

然而在 Docker 中,除錯器已經附加上去,但斷點是未綁定的。需要對 "name": "my-service-docker", 的啟動檔進行哪些更改以啟用除錯器?

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "my-service",
            "type": "node",
            "request": "attach",
            "port": 9229,
            "restart": true,
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "${workspaceFolder}",
            "sourceMaps": true
        },
        {
            "name": "my-service-docker",
            "type": "node",
            "request": "attach",
            "port": 9230,
            "restart": true,
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "${workspaceFolder}",
            "sourceMaps": true
        }
    ]
}

docker-compose.yml

YML version
version: '3.8'

Define all the services our book application needs
services:
  my-service :  # node application
    container_name: my-backend-container
    restart: always # automatically restart if the app fails
    build: 
      context: .
      dockerfile: Dockerfile
    image: username/my-service
    env_file:
      - .env
    depends_on:
      - mongo
    ports: 
      - 3000:3000
      - 9230:9229 
    volumes:
      - ./:/usr/src/app
      - exclude:/usr/src/app/node_modules/
  mongo: # database
    expose:
      - "4000"
    image: mongo:5.0.6 # pull the mongo image from docker hub
    logging: 
      driver: none # disable logging
    ports:
      - '27018:27017'
volumes:
  exclude:

nodemon.json

{
  "watch": ["src"],
  "ext": ".ts,.js",
  "ignore": [".git", "node_modules/**/node_modules"],
  "execMap": {
    "ts": "node --require ts-node/register -r tsconfig-paths/register"
  },
  "exec": "npx tsc&&node --inspect=0.0.0.0:9229  build/index.js"
}

package.json

...
///
///
 "scripts": {
  "start:dev": "NODE_ENV=development&&nodemon"
}

...

Docker 文件

FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
ENV PATH=/usr/src/app/node_modules/.bin:$PATH
If you are building your code for production
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD [ "npm", "run", "start:dev" ]

答案#1

對於 Docker,我們需要為 remoteRoot 設置正確的路徑:即 /usr/src/app

 {
            "name": "my-service-docker",
            "type": "node",
            "request": "attach",
            "port": 9230,
            "restart": true,
            "sourceMaps": true,
            "address": "localhost",
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/usr/src/app",
            "protocol": "inspector"
        }