【问题标题】:Debugging Node.js applications from inside Docker从 Docker 内部调试 Node.js 应用程序
【发布时间】:2017-08-09 16:29:29
【问题描述】:

在调试 Node.js 应用程序时,我希望命令 node index.js --inspect=5858 可以在端口 5858 上调试我的 index.js 文件。

当我在 Docker 之外的主机上运行应用程序时,我可以在 Chrome 开发工具中调试应用程序。我在 Docker 内部做了同样的事情,Chrome 开发工具无法访问端口 5858 上的调试器。

如您所见,5858端口暴露给主机进行调试:

version: '2'
services:
  server:
    build: .
    command: node index.js --inspect=5858
    volumes:
     - .:/app
    ports:
     - "8000:8000"
     - "5858:5858"
    environment:
     - NODE_ENV = "development"

我已经在 Chrome 开发工具中指定了 localhost:5858127.0.0.1:5858 网络端点,但开发工具仍然没有按照它的建议自动连接到它。

这似乎是我的 Docker 设置的问题,但正如您所见,我已将端口暴露给主机。可能是什么问题?谢谢。

【问题讨论】:

  • 您是否尝试进入容器的外壳并查看 localhost:5858 是否启动并运行?如果没有,请尝试docker exec -it container_id sh
  • @serey 我用netstat -tulpn检查了它是否在Docker中运行,并且端口5858正在运行,程序名称为45/node所以它正在运行
  • @PavSidhu 您是否在 Dockerfile 中导出了 5858 端口?
  • @CauêAlves 我刚刚尝试过,但没有运气。在 Kitematic 中,它显示端口 5858 和 8000,因此它们似乎已正确暴露。

标签: javascript node.js docker docker-compose


【解决方案1】:

问题在于,当您在容器内运行它时,默认情况下它只监听 localhost。所以你有两个选择

使用主机网络

network_mode: host 添加到您的服务并删除端口映射。不是一件理想的事情

确保 nodejs 监听每个 IP

改变

command: node index.js --inspect=5858

command: node --inspect=0.0.0.0:5858 index.js

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2017-01-13
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多