为什么Chrome无法检查Docker容器中的nodejs代码?

ale*_*nov 5 google-chrome inspect node.js docker

我尝试在Docker容器中启动简单的nodejs服务器并使用chrome:// inspect或WebStorm进行调试.调试端口9229绑定,但检查不起作用.另一方面,当我在没有docker的情况下运行相同的代码时,我可以在chrome:// inspect和WebStorm中检查它.

任何人都可以解释为什么Chrome无法检查Docker容器中的nodejs代码???

Dockerfile

FROM node:8.2.1-alpine

WORKDIR /code

COPY package.json /code/package.json
RUN npm install && npm ls
RUN mv /code/node_modules /node_modules

COPY . /code

EXPOSE 8000
EXPOSE 9229

CMD ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)

alexey @ home:〜/ app $ docker run -p 9229:9229 -p 8000:8000 node-dev

npm info it worked if it ends with ok 
npm info using npm@5.3.0  
npm info using node@v8.2.1  
npm info lifecycle @~prestart: @  
npm info lifecycle @~start: @

> @ start /code
> node --inspect app

Debugger listening on ws://127.0.0.1:9229/5b225f7d-0e18-4ded-894b-a7993bb7da64 
For help see https://nodejs.org/en/docs/inspector 
HTTP server listening on port 8000
Run Code Online (Sandbox Code Playgroud)

Hof*_*ann 8

在你的package.json中scripts:

"debug": "nodemon --inspect=0.0.0.0:9229 index.js",

在您的docker-compose.yaml中:

services: service_name: command: npm run debug ports: - 9229:9229

我对此并不是100%肯定,但我认为将调试器映射到0.0.0.0上运行会将其暴露给您的本地网络,这意味着任何人都可以通过端口9229连接到您的机器IP将能够调试您的nodejs服务器.请注意您的nodejs服务器可以访问文件系统.所以不要用这种方式运行生产(或开发)服务器.

  • 就我而言,它仍然不起作用。为了解决这个问题,我必须在 chrome://inspect -> 目标发现设置中添加 127.0.0.1:9229。由于某些不明原因 localhost:9229 还不够。就像@Gerd 的回答一样,我也必须在泊坞窗内使用不同的端口。 (7认同)

Ger*_*erd 5

你需要node --inspect 0.0.0.0:8000在容器中。容器端口 8000 映射到主机端口 9229。因此您必须使用 localhost:9229 将 chrome-dev-tools 连接到容器中的节点调试器。

详细信息https://nodejs.org/en/docs/guides/debugging-getting-started/


Vik*_*oka 5

我在调试笑话测试时遇到了这样的问题。奇怪的是,当我--inspect-brk=0.0.0.0:9229在容器中使用标志旋转测试时,该连接没有出现在 chrome://inspect 中,但我能够通过使用 Webstorm Attach to Node.js/Chrome \xef\xbb\xbf来连接到它。最终,我通过使用目标发现设置使其工作:在此输入图像描述

\n

  • 除了添加“--inspect-brk=0.0.0.0:9229”之外,在目标发现设置中设置“127.0.0.1:9229”也是缺失的链接。你是救世主。 (3认同)