如何将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偏移吗? 我在这里错过了什么吗?

Solutions Collecting From Web of "如何将VS代码附加到在泊坞窗容器中运行的节点进程"

我认为你的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