如何将VS代码附加到在泊坞窗容器中运行的节点进程
我试图将Visual Studio代码debugging器附加到在Docker容器内运行的node.js应用程序。
我开始像这样的应用程序:
node --debug-brk app.js
我在docker-compose.yml
公开debugging器端口:
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 } ] }
现在,当我启动应用程序并附加debugging器,这将正确连接(我可以看到在debugging器用户界面中闪烁的值),但它会停止,告诉我以下内容:
Error opening 'app.js' (File not found: /code/app.js).
这是因为docker-compose.yml
不会在root中挂载应用程序,而是在/code
(请参阅docker-compose.yml
volumes
),VS代码被突然偏移所困扰。
当我运行应用程序之外的容器(即本地,没有偏移量),它的工作方式和预期的一样,我可以按照预期使用debugging器。
对于启动configuration似乎有一个cwd
选项,但我不知道这是否对我的情况有任何改变。
我可以修复这个path偏移吗? 我在这里错过了什么吗?
我认为你的debugging器被欺骗了,因为你的docker里面的应用程序path是/code
,在你的电脑上它有些不同。
也许像/home/m90/code
。
所以当你的debugging器试图在你的本地机器上查看你的代码时。 它看起来只存在于docker内部的/code
。 docker以外的path没有任何意义。
如果你可以告诉你的debugging器在你机器上的正确位置(再次在docker容器的外面)寻找你的代码来修复它。
另一种方法是在Docker内外使用相同的代码path。
试试这个修改版本的docker-compose.yml。 (将docker中的复制/代码目录复制到主机目录/代码中)
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可以在那里find你的源代码: sudo mount --bind . /code
sudo mount --bind . /code
此function现在正式由VSCode支持: https : //github.com/Microsoft/vscode-node-debug/issues/8