docker 容器中的调试节点 (>=6.3)
Debug Node (>=6.3) from a docker container
我有一个 docker 容器,它使用 pm2 到 运行 节点,如下所示:
#process.yml
apps:
- script: ./index.js
name: client
watch: true
args: --inspect
#Dockerfile
CMD pm2-docker process.yml
正如我在 that post 中所读到的:节点检查器已经到达 node.js 的核心并且 运行 正在编写如下脚本:
node --inspect <somescript.js>
在命令行上提供一些输出,例如:chrome-devtools://…
并导航到 chrome 中的 url,将启动节点检查器。
如何为位于容器内但应从主机调试的节点实例执行此操作。
更新
我可以通过改变两件事来设法启动调试过程:
node_args: --inspect=localhost:9080
docker run ... -p 9080:9080
但这会带来一个问题:要使用的 URL 会在 node --inspect=... ...
执行后立即显示在命令行上,但是当 运行 连接 docker 容器时该信息会记录在某处的日志中。那么如何从那里访问 url?
您只需使用 -p 9229:9229 或
发布所需内容
ports:
- 9229:9229
在 docker-compose 中,然后使用 pm2 和 --inspect
arg 或直接使用 node --inspect index
启动它。
然后 url 将被打印出来,您可以像没有 docker.
一样简单地在 chrome 中使用它
之后要查找该行,您可以使用
docker-compose logs service-name | grep chrome-devtools
或
docker logs container-id 2>&1 | grep chrome-devtools
我有一个 docker 容器,它使用 pm2 到 运行 节点,如下所示:
#process.yml
apps:
- script: ./index.js
name: client
watch: true
args: --inspect
#Dockerfile
CMD pm2-docker process.yml
正如我在 that post 中所读到的:节点检查器已经到达 node.js 的核心并且 运行 正在编写如下脚本:
node --inspect <somescript.js>
在命令行上提供一些输出,例如:chrome-devtools://…
并导航到 chrome 中的 url,将启动节点检查器。
如何为位于容器内但应从主机调试的节点实例执行此操作。
更新
我可以通过改变两件事来设法启动调试过程:
node_args: --inspect=localhost:9080
docker run ... -p 9080:9080
但这会带来一个问题:要使用的 URL 会在 node --inspect=... ...
执行后立即显示在命令行上,但是当 运行 连接 docker 容器时该信息会记录在某处的日志中。那么如何从那里访问 url?
您只需使用 -p 9229:9229 或
发布所需内容ports:
- 9229:9229
在 docker-compose 中,然后使用 pm2 和 --inspect
arg 或直接使用 node --inspect index
启动它。
然后 url 将被打印出来,您可以像没有 docker.
之后要查找该行,您可以使用
docker-compose logs service-name | grep chrome-devtools
或
docker logs container-id 2>&1 | grep chrome-devtools