为什么 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 代码???
Docker文件
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 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
您需要 node --inspect 0.0.0.0:8000
容器。容器端口 8000 映射到主机端口 9229。因此您必须使用 localhost:9229 将 chrome-dev-tools 连接到容器中的节点调试器。
详情https://nodejs.org/en/docs/guides/debugging-getting-started/
在你的 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 服务器可以访问文件系统。所以永远不要 运行 生产(或开发)服务器。
相反,在 docker 容器内,运行 应用为:
node --inspect=0.0.0.0 app.js
*带有 =0.0.0.0 后缀
我尝试在 Docker 容器中启动简单的 nodejs 服务器,并使用 chrome://inspect 或 WebStorm 对其进行调试。绑定了9229调试端口,但检测不通。另一方面,当我 运行 没有 docker 的相同代码时,我可以在 chrome://inspect 和 WebStorm 中检查它。
谁能解释一下为什么 Chrome 无法检查 Docker 容器中的 nodejs 代码???
Docker文件
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 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
您需要 node --inspect 0.0.0.0:8000
容器。容器端口 8000 映射到主机端口 9229。因此您必须使用 localhost:9229 将 chrome-dev-tools 连接到容器中的节点调试器。
详情https://nodejs.org/en/docs/guides/debugging-getting-started/
在你的 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 服务器可以访问文件系统。所以永远不要 运行 生产(或开发)服务器。
相反,在 docker 容器内,运行 应用为:
node --inspect=0.0.0.0 app.js
*带有 =0.0.0.0 后缀