You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下Docker容器无法通过host.docker.internal连接主机问题

Docker容器无法通过host.docker.internal连接主机端口问题

我希望在Docker中部署Prometheus实例,并通过Prometheus Node Exporter获取主机指标。根据Docker文档,容器内可通过特殊DNS名称host.docker.internal连接主机,但Linux系统需手动通过extra_hosts配置该条目,我已配置但仍无法成功。

复现步骤

  • 使用ncat在0.0.0.0:55555监听:
➜ ncat -vv -k -l -p 55555
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::55555
Ncat: Listening on 0.0.0.0:55555
  • 在主机上验证可成功连接ncat:
➜ telnet localhost 55555
Trying ::1...
Connected to localhost.
➜ ncat -vv -k -l -p 55555
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::55555
Ncat: Listening on 0.0.0.0:55555
Ncat: Connection from ::1.
Ncat: Connection from ::1:48416.
  • 通过Docker Compose启动容器,已在extra_hosts中添加host.docker.internal:host-gateway:
➜ docker-compose down; docker-compose up -d; docker-compose logs -f
version: "3.9"

services:
  prometheus:
    image: prom/prometheus:v2.42.0
    user: "1000:1000"
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    extra_hosts:
      host.docker.internal: "host-gateway"
    volumes:
      - "./config/prometheus.yml:/etc/prometheus/prometheus.yml"
        # Note that Prometheus requires the mounted `data/` directory 
        # is created with fully open permissions, `chmod -R 777 data`
      - "./data/prometheus:/prometheus"
  • 进入容器终端尝试连接主机ncat,报错:
➜ docker exec -it --user root prometheus /bin/sh
➜ telnet host.docker.internal 55555

telnet: can't connect to remote host (172.17.0.1): Connection refused

我已尝试多个相关解决方案,均无效。

调试信息

  • 使用简单Alpine容器测试仍失败:
➜ docker run --add-host=host.docker.internal:host-gateway --rm -it alpine sh

# inside the container:
➜ apk add curl
➜ curl http://host.docker.internal:55555
# curl: (7) Failed to connect to host.docker.internal port 55555 after 0 ms: Couldn't connect to server
  • 确认ncat在TCP和TCP6的0.0.0.0监听:
➜ sudo netstat -tulpn | grep :55555
tcp        0      0 0.0.0.0:55555           0.0.0.0:*               LISTEN      16150/ncat
tcp6       0      0 :::55555                :::*                    LISTEN      16150/ncat
  • 容器内可ping通host.docker.internal:
➜ ping host.docker.internal:55555
PING host.docker.internal:55555 (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: seq=0 ttl=64 time=0.049 ms
64 bytes from 172.17.0.1: seq=1 ttl=64 time=0.158 ms
^C
--- host.docker.internal:55555 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.049/0.103/0.158 ms
  • 容器内/etc/hosts已存在host.docker.internal条目:
➜ cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1      host.docker.internal
172.17.0.2      84a18e1e361b

内容的提问来源于stack exchange,提问作者aSemy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:54:58