【问题标题】:Can't debug node, with nodemon, dockerfile and docker-compose无法调试节点,使用 nodemon、dockerfile 和 docker-compose
【发布时间】:2020-08-16 13:08:05
【问题描述】:

我已经尝试了很多东西,阅读了很多文章,有时我的调试甚至无法正常工作,当它运行时,我的应用程序在使用 docker 运行我的应用程序时永远不会在我的断点处停止,如果我删除了launch.json并在docker之外运行我的应用程序,只运行“node app.js”,我可以正常调试。

很抱歉,如果这是显而易见的事情,我真的很难做到。

如果有人能给我任何指导,我会很高兴。

这是我的 package.json

 "name": "ahgorastrainer",
 "version": "1.0.0",
 "description": "",
 "main": "app.js",
 "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1",
   "start": "nodemon --inspect=0.0.0.0:9229 app.js"
 },
 "author": "Pedro Verani",
 "license": "ISC",
 "dependencies": {
   "bcryptjs": "^2.4.3",
   "body-parser": "^1.19.0",
   "bootstrap": "^4.4.1",
   "ejs": "^3.1.2",
   "express": "^4.17.1",
   "express-session": "^1.17.1",
   "mongoose": "^5.9.10",
   "nodemailer": "^6.4.6",
   "nodemon": "^2.0.3"
 }
}

Docker-compose

 version: '3'

services:
  ahgora-strainer:
    build: .
    command: npm start
    ports: 
      - 3000:3000
      - 9229:9229
    volumes:
      - .:/usr/app 

Docker 文件

 FROM node:alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install --quiet

COPY . . 

EXPOSE 3000

CMD ["npm", "start"] 

启动 Json(在这里我尝试了十亿种不同的配置)

 "version": "0.2.0",
    "configurations": [
        {
            "port": 9229,
            "name": "strainer",
            "type": "node",
            "request": "attach",
            "remoteRoot": "/usr/src/app",
            "restart": true,
            "sourceMaps": false,
            "timeout": 99999999
        },
    ]
} 

【问题讨论】:

  • 我通常附加到在 chrome 开发工具中运行的进程(在 chrome 中打开 about:inspect)。您使用什么工具附加到 docker 节点(远程)进程?
  • 不知道你在说什么
  • 你是如何连接到调试的?您正在运行什么工具或命令,错误是什么?

标签: node.js docker debugging nodemon


【解决方案1】:

在容器中运行节点应用程序时,必须将其作为远程节点进程进行调试。因此,您需要附加到该过程。 Chrome 使这个过程相对容易(一旦设置好)。 我通常这样做的方式:

正常设置我的 package.json,例如:

  "scripts": {
    "start": "node src/index.js"
  },

在 Dockerfile 中安装 nodemon:

RUN npm install -g nodemon@1.19.1

终于在docker-compose中:

  mynodeapp:
    build: ./nodeApp
    container_name: mynodemultidb
    command: nodemon -L --inspect=0.0.0.0:5858
    volumes:
      - ./nodeApp:/code
    ports:
      - "8000:8000"
      - "5858:5858"
      - "3000:3000"

然后使用docker-compose up 启动应用程序 通过转到localhost:3000(或您公开的任何端口)在 Google chrome 中打开应用程序 打开一个新选项卡并导航到about:inspect 您的应用程序应显示在远程目标部分。

点击检查链接。 这将打开附加到代码的开发工具。

点击页面右侧的源代码链接(上图中的index.js:37)。 这将打开代码,现在可以根据需要放置断点

返回运行您的应用的选项卡并刷新它以激活调试。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 2019-12-25
    • 1970-01-01
    • 2019-10-31
    • 2021-08-19
    • 1970-01-01
    • 2020-05-16
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多