请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

容器端口映射后,无法通过宿主机ip访问

运行一个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的时候有问题,不过我也不确定,没有遇到过呢。

0 回复 有任何疑惑可以回复我~
  • 提问者 Aioria_ #1
    环境是公司局域网内用vmware虚拟化的一台机器,系统是centos7.2,安装docker是按照官网的操作步骤傻瓜式安装,发现问题后和正常的机器比较发现docker0的信息中第一行少了"group default"这两项,不知道是什么意思,就把docker卸载,同时手动删除了dockek0,重新装了docker还是老样子。本来想用docker运行一个小的应用,实在搞不定的话,就考虑手动搭建环境不用docker了。
    回复 有任何疑惑可以回复我~ 2020-03-02 11:47:15
  • 麦兜搞IT 回复 提问者 Aioria_ #2
    抱歉没能帮到您,您提到了的”在另外一台机器上“,是一台什么机器呢,也是centos7么
    回复 有任何疑惑可以回复我~ 2020-03-04 03:59:34
  • 提问者 Aioria_ 回复 麦兜搞IT #3
    是的,另外一台正常的是centos7.4。我估计是机器本身有问题(但又说不清具体是什么问题),而且不是公司内部的人提供的,不太方便沟通,这个小项目就不用docker了,手动安装环境,将程序跑起来就结束。谢谢老师,以后有新的问题再请教。
    回复 有任何疑惑可以回复我~ 2020-03-04 13:57:01
江湖沧海客 2020-03-01 17:41:32

端口映射8080:80 改成 80:8080

0 回复 有任何疑惑可以回复我~
  • 提问者 Aioria_ #1
    你这明显不对
    回复 有任何疑惑可以回复我~ 2020-03-02 11:48:32
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号