内容目录
系统
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
近期评论