如何将VS代码附加到在docker容器中运行的节点进程

时间:2015-10-09 07:15:03

标签: node.js docker visual-studio-code docker-compose

我试图将Visual Studio代码调试程序附加到在Docker容器中运行的node.js应用程序。

我启动应用程序,如:

node --debug-brk app.js

我在docker-compose.yml中公开调试器端口:

app:
  build: .
  working_dir: /code
  volumes:
    - .:/code
  command: npm run debug
  ports:
    - "3004:3000"
    - "5858:5858"

我的launch.json看起来像是:

{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Attach",
            "type": "node",
            "address": "localhost",
            "port": 5858
        }
    ]
}

现在,当我启动应用程序并连接调试器时,这将正确连接(我可以看到调试器UI中的值已经闪烁),但它会停止,告诉我以下内容:

Error opening 'app.js' (File not found: /code/app.js).

这是因为docker不会在root用户中安装应用程序,而是在/code中(请参阅volumes中的docker-compose.yml),VS代码会因突然偏移而感到困惑。< / p>

当我在容器外部运行应用程序时(即本地,没有偏移),它按预期工作,我可以按预期使用调试器。

启动配置似乎有一个cwd选项,但我不确定这是否会对我的情况产生任何影响。

我可以修复此路径偏移吗?我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:1)

VSCode现在正式支持此功能:https://github.com/Microsoft/vscode-node-debug/issues/8

答案 1 :(得分:0)

我认为您的调试器被欺骗了,因为您的docker中的应用程序路径是/home/m90/code,而在您的计算机上它是不同的。

也许像/code这样的东西。

因此,当您的调试器试图查看本地计算机上的代码时。它查看仅存在于docker内部的<bean id="databaseds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="removeAbandoned" value="true"/> <property name="initialSize" value="1" /> <property name="maxActive" value="2" /> <property name="maxIdle" value="0" /> <property name="minEvictableIdleTimeMillis" value="120000" /> </bean> 。这条路径在docker之外毫无意义。

如果您可以告诉调试器在您的计算机上的正确位置找到您的代码(再次在docker容器之外),这将修复它。

另一种方法是在docker内外为代码提供相同的路径。

答案 2 :(得分:0)

尝试使用docker-compose.yml的这个修改版本。 (将docker中的copy / code目录添加到主目录/代码中)

docker-compose.yml

app:
  build: .
  working_dir: /code
  volumes:
    - /code:/code
  command: npm run debug
  ports:
    - "3004:3000"
    - "5858:5858"

仅更改了一行: /code:/code 而不是.:/code

答案 3 :(得分:0)

您可以尝试在/code上绑定挂载当前目录,以便VS可以在那里找到您的源代码:sudo mount --bind . /code

答案 4 :(得分:0)

对我来说,直到我使用了检查:node --inspect=5858 app.js