我有一个简单的nodeJs应用程序,它使用快速框架工作。我可以在docker容器中成功运行此应用程序。
我需要从VS代码远程调试这个应用程序如何做到这一点。
我在
中远程调试以下步骤var express = require('express');
var app = express();
var fs = require('fs')
var logger = fs.createWriteStream('log.txt', { flags: 'a' })
app.get('/', function(reg, res){
res.send('Home page ' + reg.params.id);
});
app.get('/:id', function(reg, res){
if(reg.params.id != 'favicon.ico')
logger.write( ' ' + reg.params.id);
res.send('Home page ' + reg.params.id);
});
app.listen(3000, function(){
console.log('A test server is running');
})
{
"type": "node",
"request": "attach",
"name": "Attach to Process",
"port": 5858,
"address": "192.168.1.10",
"restart": false,
"sourceMaps": false,
"localRoot": "${workspaceRoot}/",
"remoteRoot": "/app/"
}
FROM node:7.2.0-alpine
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
WORKDIR /app/src
EXPOSE 8080
EXPOSE 5858
CMD ["node","--debug-brk=5858","app.js"]
docker build命令
docker build -t remotedebug .
泊坞窗运行命令
docker run --rm --name test -p8080:3000 -p5858:5858 remotedebug
运行docker后,控制台会输出一条消息
调试器监听127.0.0.1:5858
但我无法从localhost:8080访问节点应用程序,无法从VScode调试。
答案 0 :(得分:0)
您使用的是本机码头工程师还是码头工程师?我怀疑您正在使用docker机器,在这种情况下,docker在虚拟机内运行,您需要连接到该机器的IP地址而不是127.0.0.1
。类型:
docker-machine ls
你会得到这样的输出:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.9.1
在这种情况下,您告诉VS Code连接到192.168.99.100:5858
答案 1 :(得分:0)
您必须为dockerfile cmd指定--inspect
或--inspect-brk
,请记住指定0.0.0.0
,因为nodejs绑定到127.0.0.1
会导致问题。
示例:
expose 9090
node --inspect=0.0.0.0:9090 ...otherargs
和vscode:
{
"type": "node",
"request": "attach",
"name": "attach to docker",
"port": 9290
"localRoot": "${workspaceFolder}",
"remoteRoot": "/usr/src/app/server"
},