我试图将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
选项,但我不确定这是否会对我的情况产生任何影响。
我可以修复此路径偏移吗?我在这里错过了什么吗?
答案 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