繁体   English   中英

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

[英]Why Chrome can't inspect nodejs code in Docker container?

我尝试在 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"]

alexey@home:~/app$ docker 运行 -p 9229:9229 -p 8000:8000 节点开发

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

在你的 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 服务器可以访问文件系统。 所以永远不要用它运行生产(或开发)服务器。

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

详情https://nodejs.org/en/docs/guides/debugging-getting-started/

相反,在 docker 容器内,将应用程序运行为:

节点 --inspect=0.0.0.0 app.js

*with =0.0.0.0后缀

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM