docker容器无法访问宿主机内网ip

内容目录

系统

ubuntu 24.04 x64
docker 26.1.3
ufw 开启

问题

宿主机内网ip 172.30.171.61
容器内能ping通 但是无法访问 172.30.171.61 的任何端口,
能访问其他内网ip的服务比如172.30.171.62

原因

  • 网络连通性没问题(ICMP 是通的)
  • 但是 TCP 端口访问失败,宿主机上的服务(如 9090)没法被容器访问。

1️⃣ 宿主机防火墙 (ufw) 阻止了容器来源的连接

  • 默认 Ubuntu + Docker,宿主机上 ufw 是阻止来自 Docker 容器的流量的,尤其是容器用的是 bridge 网络模式
  • 容器 IP 可能是 172.x.x.x 或自定义 bridge 网络。

检查 ufw 状态:

sudo ufw status numbered
root@01:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443/tcp                    ALLOW IN    Anywhere 

解决

docker 一般是172网段

for net in $(docker network ls --format '{{.Name}}'); do
  echo "Network: $net"
  docker network inspect $net --format 'Subnet: {{range .IPAM.Config}}{{.Subnet}}{{end}}'
  echo "--------------------"
done
Network: bridge
Subnet: 172.17.0.0/16
--------------------
Network: host
Subnet: 
--------------------
Network: mysql_default
Subnet: 172.20.0.0/16
--------------------
Network: none
Subnet: 

所以防火墙放行

 sudo ufw allow from 172.0.0.0/8 to 172.30.171.61
root@01:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443/tcp                    ALLOW IN    Anywhere                  
[ 4] 172.30.171.61              ALLOW IN    172.0.0.0/8  

如果IP输入错误删除规则,可以根据规则序号删除重新添加

ufw delete 4

进容器测试端口已经OK

21cc1536fce9:/usr/share/grafana$ nc -zv 172.30.171.61 9115
172.30.171.61 (172.30.171.61:9115) open

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注