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"
}
