使用docker-compose的docker容器中的节点检查器

时间:2016-09-26 04:49:08

标签: node.js docker docker-compose node-inspector

我觉得我很接近让docker-compose和节点检查员一起玩得很好,但如果有人能告诉我他们如何设置他们的docker-compose文件以及它是如何工作的解释,我会很高兴。

这里有我的compose.yml文件,其中只包含节点应用程序:

  app:
    image: my-node-app
    volumes:
     - '~/mycode:/app/code'
    ports:
     - "3000:3000"
    command: /bin/bash

另请注意我使用Docker for Mac。 (虽然我认为不应该改变太多......)

我找到了一些关于如何做到这一点的教程,但信息要么过时了,要么看起来不完整。以下是两种主要方法(对我来说都没有用):

1)来自:https://github.com/seelio/node-inspector-docker/issues/1

app:
    image: my-node-app
    ports:
     - "3000:3000"
    command: /bin/bash
    volumes_from:
     - code
debugger:
    image: node-debug
    depends_on: 
      - app
    # `service` instead of `container` for an easier cold start
    network_mode: 'service:app'
    volumes_from:
      - code
code:
    image: node
    volumes:
     - '~/mycode:/app/code'

2)

和来自:https://keylocation.sg/our-tech/debugging-nodejs-in-docker-using-node-inspector

 debugger:
    container_name: debugger
    network_mode: host
    extends:
      service: base
    volumes:
      - /app/containers/debugger:/app/container
  

需要一个小技巧是为节点应用程序容器添加端口5858映射,以便Node Inspector可以在主机上将其视为端口5858:

 node-app:
    ports:
      - "5858:5858" # Port needs to be mapped to host so that debugger container can access it

2 个答案:

答案 0 :(得分:0)

您必须在应用Dockerfile中添加EXPOSE 5858EXPOSE 9229

答案 1 :(得分:0)

节点的调试接口需要知道可在Docker容器的本地网络外部访问,因此检查器应以

启动
node --inspect-brk=0.0.0.0:9229 index.js

将index.js替换为要运行的任何节点。

使用

--inspect-brk代替--inspect,以便可以在脚本开始时附加调试器,以便它可以跟踪其所做的一切,从而使调试器可以知道正在发生的一切,从而有效地允许正确的调试。

广播IP导致检查器监听所有内容,而不关闭本地主机外部的连接(默认设置)。默认端口为9229。