Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Visual Studio代码调试器附加到运行在nginx代理后面的docker计算机上的Node.JS应用程序_Node.js_Docker_Debugging_Nginx - Fatal编程技术网

如何将Visual Studio代码调试器附加到运行在nginx代理后面的docker计算机上的Node.JS应用程序

如何将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

我正在尝试将调试器附加到node.js应用程序。到目前为止,我没有运气,它总是以以下错误消息结束:

以下是我如何设置系统:

总体上 我有三个容器在不同的网络上运行:

我有一个前端容器,包含客户端javascript和html代码,运行在nginx服务器上。nginx还将服务器作为API的代理

API位于express容器中。它是一个在端口3000上运行的node.js应用程序

然后我有一个mongo容器,用于持久性

Docker-撰写技术详细信息:

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”
}
]
}
到目前为止我做了什么
  • 打开对api的直接访问并删除通过nginx的路由,然后打开express容器上的调试端口并尝试调试:超时,错误:connect EconRefused

  • 使用socat容器尝试此指南:-但未成功

  • 以调试模式启动应用程序,连接到容器并通过cli进行调试-无法从web客户端访问API

  • Canlde light调试,当您必须在每次console.log()之后重建时,执行该调试非常糟糕

  • 如果你需要更多的信息来评论它,我会非常感谢你的提示或者一个教程


    也许我遗漏了什么

    别管我解决了这个问题


    我必须更改启动应用程序的方式(通过node inspect而不是npm start)

    您的应用程序托管在哪里?是否存在可能需要打开端口9229的防火墙/负载平衡器/etc?你能在Docker上本地运行和调试你的应用程序吗?你能详细介绍一下你是如何解决这个问题的吗?你的配置是什么?localhost也可以代替docker机器IP工作吗?