无法在裸露的Docker容器端口上连接到Node.js / Jest检查器

时间:2020-04-17 14:42:37

标签: node.js docker jestjs

无法连接到Node.js Chrome检查器上的Jest检查器(端口9230)

当我跑步时: docker exec -it test_api_run_eb9ed32c928a wget -qO- http://localhost:9230/json

从容器返回JSON:

[ {
  "description": "node.js instance",
  "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:9230/a0dab38a-e6d8-43a3-a459-e3ea9eabf470",
  "devtoolsFrontendUrlCompat": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:9230/a0dab38a-e6d8-43a3-a459-e3ea9eabf470",
  "faviconUrl": "https://nodejs.org/static/favicon.ico",
  "id": "a0dab38a-e6d8-43a3-a459-e3ea9eabf470",
  "title": "node_modules/.bin/jest",
  "type": "node",
  "url": "file:///usr/src/sand/node_modules/jest/bin/jest.js",
  "webSocketDebuggerUrl": "ws://localhost:9230/a0dab38a-e6d8-43a3-a459-e3ea9eabf470"
} ]
  • 但是当我访问chrome://inspect时,资源未列出。我已经将localhost:9230添加为发现的网络目标。

  • 当我在浏览器中访问chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:9230/a0dab38a-e6d8-43a3-a459-e3ea9eabf470时,Chrome出现以下错误:

  • Debugging connection was closed. Reason: WebSocket disconnected

Docker端口

运行docker port test_api_run_eb9ed32c928a 9230返回: Error: No public port '9230/tcp' published for test_api_run_eb9ed32c928a

Docker Compose代码段:

    expose:
      - '8000'
    ports:
      - '127.0.0.1:9230:9230'

  • 我也尝试过从127.0.0.1:中删除ports:

Node.js / Jest启动命令:

node --inspect-brk=0.0.0.0:9230 node_modules/.bin/jest --forceExit --runInBand

CLI输出: Debugger listening on ws://0.0.0.0:9230/74d22b62-051d-4aa3-b312-5f4defb170e6

在容器中运行netstat -a

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:9230            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.11:41339        0.0.0.0:*               LISTEN
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 127.0.0.11:53289        0.0.0.0:*
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path

Docker检查容器(NetworkSettings代码段):

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "5c1fb6ad8189e4407cf40eb8dc0d9f0f8eacc13df6bb0b45b8d48d51da33655f",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "9230/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/5c1fb6ad8189",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "test_sand": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "51117364a172"
                    ],
                    "NetworkID": "338c689e41c4ecbb691626560f6f98a04f6d9a93e640a766d37faa773e5ce760",
                    "EndpointID": "0c161fd96b88a60ea10a85d81aeda09cd936added4363dd7ba6613dea3ad9045",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:04",
                    "DriverOpts": null
                }
            }
        }

看起来有问题的区域是:

"Ports": {
    "9230/tcp": null
},
  • Netstat的输出也看起来很奇怪

是否缺少我要解决的步骤,或者端口配置错误,或者其他干扰网络的信息?

1 个答案:

答案 0 :(得分:0)

通过在docker-compose run中加入--service-ports来解决此问题