如何将Visual Studio代码调试器附加到运行在nginx代理后面的docker计算机上的Node.JS应用程序
我正在尝试将调试器附加到node.js应用程序。到目前为止,我没有运气,它总是以以下错误消息结束: 以下是我如何设置系统: 总体上 我有三个容器在不同的网络上运行: 我有一个前端容器,包含客户端javascript和html代码,运行在nginx服务器上。nginx还将服务器作为API的代理 API位于express容器中。它是一个在端口3000上运行的node.js应用程序 然后我有一个mongo容器,用于持久性 Docker-撰写技术详细信息:如何将Visual Studio代码调试器附加到运行在nginx代理后面的docker计算机上的Node.JS应用程序,node.js,docker,debugging,nginx,Node.js,Docker,Debugging,Nginx,我正在尝试将调试器附加到node.js应用程序。到目前为止,我没有运气,它总是以以下错误消息结束: 以下是我如何设置系统: 总体上 我有三个容器在不同的网络上运行: 我有一个前端容器,包含客户端javascript和html代码,运行在nginx服务器上。nginx还将服务器作为API的代理 API位于express容器中。它是一个在端口3000上运行的node.js应用程序 然后我有一个mongo容器,用于持久性 Docker-撰写技术详细信息: version: '3.0' # speci
version: '3.0' # specify docker-compose version
# Define the services/ containers to be run
services:
frontend:
container_name: frontend
build: frontend
ports:
- '80:80'
- '443:443'
networks:
- front
express: # name of the second service
container_name: express
build: express-server # specify the directory of the Dockerfile
ports:
- '9229:9229'
networks:
- front
- backbone
mongo: # name of the third service
container_name: mongo
image: mongo # specify image to build container from
volumes:
- "db:/data/db"
networks:
- backbone
networks:
front:
driver: bridge
backbone:
driver: bridge
volumes:
db:
前端
如前所述,前端容器将对“/api”子域的调用路由到相应的express-Container。因此,api不能通过其端口访问,只能通过路由访问(因此它只能在https中工作)
此外,由于https和chromes关于http和https站点的新策略,还有一个从80->443的重定向
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
ssl on;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
listen *:443 ssl;
server_name _;
root /var/www;
index index.html;
location /api/ {
rewrite ^/api/?(.*) /$1 break;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://express:3000;
}
}
快车
该应用程序是一个简单的REST-API,几乎可以开箱即用(感谢express:)
然而,一个调用遇到异常,我想正确地调试它,所以我尝试了不同的方法来附加调试器
调试器配置
我在visual studio代码中配置了调试器,如下所示:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Remote",
"address": "<docker-machine-ip>",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/usr/src/app"
},
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/express-server\\app.js"
}
]
}
{
“版本”:“0.2.0”,
“配置”:[
{
“类型”:“节点”,
“请求”:“附上”,
“名称”:“附加到远程”,
“地址”:“地址”,
“港口”:9229,
“localRoot”:“${workspaceFolder}”,
“remoteRoot”:“/usr/src/app”
},
{
“类型”:“节点”,
“请求”:“启动”,
“名称”:“启动计划”,
“程序”:“${workspaceFolder}/express server\\app.js”
}
]
}
到目前为止我做了什么
也许我遗漏了什么别管我解决了这个问题
我必须更改启动应用程序的方式(通过node inspect而不是npm start)您的应用程序托管在哪里?是否存在可能需要打开端口9229的防火墙/负载平衡器/etc?你能在Docker上本地运行和调试你的应用程序吗?你能详细介绍一下你是如何解决这个问题的吗?你的配置是什么?localhost也可以代替docker机器IP工作吗?