如何将 VS Code 附加到 docker 容器中的节点进程 运行
How can I attach VS Code to a node process running in a docker container
我正在尝试将 Visual Studio 代码调试器附加到 node.js 应用程序,该应用程序 运行 正在 Docker 容器内。
我像这样启动应用程序:
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
中挂载应用程序(参见 docker-compose.yml
中的 volumes
)并且 VS 代码很混乱由于突然的偏移。
当我 运行 容器外的应用程序(即本地,无偏移)时,它按预期工作,我可以按预期使用调试器。
启动配置似乎有一个 cwd
选项,但我不确定这对我的情况是否有影响。
我可以修复这个路径偏移吗?我还漏掉了什么吗?
我认为你的调试器被欺骗了,因为你的应用程序路径在 docker 中是 /code
而在你的计算机上它是不同的东西。
可能类似于 /home/m90/code
。
所以当你的调试器试图在你的本地机器上查看你的代码时。它查看仅存在于 docker 内部的 /code
。此路径在 docker.
之外没有任何意义
如果您可以告诉您的调试器在您机器上的正确位置(同样是在 docker 容器之外)查找您的代码,那将修复它。
另一种方法是在 docker 内外为您的代码设置相同的路径。
试试这个 docker-compose.yml 的修改版本。 (将 docker 中的 /code 目录复制到您的主机目录 /code)
docker-compose.yml
app:
build: .
working_dir: /code
volumes:
- /code:/code
command: npm run debug
ports:
- "3004:3000"
- "5858:5858"
只更改了一行:/code:/code
而不是 .:/code
您可以尝试将当前目录绑定挂载到 /code
以便 VS 可以在那里找到您的源代码:sudo mount --bind . /code
VSCode现已正式支持此功能:https://github.com/Microsoft/vscode-node-debug/issues/8
对我来说,直到我使用检查才起作用:node --inspect=5858 app.js
我正在尝试将 Visual Studio 代码调试器附加到 node.js 应用程序,该应用程序 运行 正在 Docker 容器内。
我像这样启动应用程序:
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
中挂载应用程序(参见 docker-compose.yml
中的 volumes
)并且 VS 代码很混乱由于突然的偏移。
当我 运行 容器外的应用程序(即本地,无偏移)时,它按预期工作,我可以按预期使用调试器。
启动配置似乎有一个 cwd
选项,但我不确定这对我的情况是否有影响。
我可以修复这个路径偏移吗?我还漏掉了什么吗?
我认为你的调试器被欺骗了,因为你的应用程序路径在 docker 中是 /code
而在你的计算机上它是不同的东西。
可能类似于 /home/m90/code
。
所以当你的调试器试图在你的本地机器上查看你的代码时。它查看仅存在于 docker 内部的 /code
。此路径在 docker.
如果您可以告诉您的调试器在您机器上的正确位置(同样是在 docker 容器之外)查找您的代码,那将修复它。
另一种方法是在 docker 内外为您的代码设置相同的路径。
试试这个 docker-compose.yml 的修改版本。 (将 docker 中的 /code 目录复制到您的主机目录 /code)
docker-compose.yml
app:
build: .
working_dir: /code
volumes:
- /code:/code
command: npm run debug
ports:
- "3004:3000"
- "5858:5858"
只更改了一行:/code:/code
而不是 .:/code
您可以尝试将当前目录绑定挂载到 /code
以便 VS 可以在那里找到您的源代码:sudo mount --bind . /code
VSCode现已正式支持此功能:https://github.com/Microsoft/vscode-node-debug/issues/8
对我来说,直到我使用检查才起作用:node --inspect=5858 app.js