容器端口映射后,无法通过宿主机ip访问
来源:4-4 Docker bridge0详解
Aioria_
2020-02-28
运行一个nginx的容器,绑定宿主机的8080端口
docker run -d \
--name nginx-8080 \
-p 8080:80 \
-v ~/nginx-sign-web/html:/usr/share/nginx/html \
-v ~/nginx-sign-web/conf:/etc/nginx \
nginx
宿主机ip为172.18.6.123,外部无法通过http://172.18.6.123:8080访问Nginx,在宿主机执行telnet 127.0.0.1 8080
也是不通。
在宿主机上尝试ping容器内部的ip 172.17.0.2,同样是不通的。
[user1@smcv bin]$ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
From 172.17.0.1 icmp_seq=1 Destination Host Unreachable
From 172.17.0.1 icmp_seq=2 Destination Host Unreachable
From 172.17.0.1 icmp_seq=3 Destination Host Unreachable
一开始以为是firewalld关系,尝试放行8080/tcp,不管用,索性停掉firewalld还是不起作用。
搞不懂为什么,于是停掉了该容器,在宿主机上直接运行了一个Tomcat,监听8080端口,尝试访问,一切正常。
在另外一台机器上,同样的操作结果都是正常的,不存在上面说的这种情况。
对比了2台机器上的docker0网络接口,有细微差别(少了group default两项内容)
有问题的:
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:43:c5:00:5b brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:43ff:fec5:5b/64 scope link
valid_lft forever preferred_lft forever
正常的:
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:62:ac:b2:0b brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:62ff:feac:b20b/64 scope link
valid_lft forever preferred_lft forever
另外在尝试启动容器的时候,偶尔遇到下面这种iptables有关的错误提示
$ docker run --name mongo1 -p 27011:27017 -v /data/db/mongo1:/data/db -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro -d mongo:latest
ceb02e59282ad4eab6bceb9086794cf44a53dfe64a4b1045bb8b1c465aa53e2d
docker: Error response from daemon: driver failed programming external connectivity on endpoint mongo1 (3450ca000350f6cb642f67272b8c6b1736e8c252a72a48623a23215950693713): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 27011 -j DNAT --to-destination 172.17.0.2:27017 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
由于计算机网络水平太差,被这个问题困扰几天,希望借助老师专业的网络知识,帮我找出问题的原因,非常感谢!
写回答
2回答
-
您的环境能详细说一下么,比如您是什么系统,怎么安装的docker,感觉像是在创建docker0的时候有问题,不过我也不确定,没有遇到过呢。
042020-03-05 -
江湖沧海客
2020-03-01
端口映射8080:80 改成 80:8080
012020-03-02
相似问题