我怎么能ping我的docker容器从我的主机

我在我的Mac上创build了一个Ubuntu的Docker容器

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5d993a622d23 ubuntu "/bin/bash" 42 minutes ago Up 42 minutes 0.0.0.0:123->123/tcp kickass_ptolemy 

我把端口设置为123。

我的容器IP是172.17.0.2

 docker inspect 5d993a622d23 | grep IP "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "IPAMConfig": null, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, 

在我的Mac上,我尝试ping我的容器,

Ping 172.17.0.2 ,我得到请求超时为icmp_seq 0 ….

我该怎么办? 所以我的本地机器可以ping我安装的容器。 我在我的容器上错过了一些应用程序安装,这是一个普通的ubuntu系统?

您无法使用Docker for Mac直接ping或访问容器界面 。

目前最好的解决方案是从另一个容器连接到你的容器。 目前,由于苹果尚未解决的OSX问题,我们无法为这些容器提供路由。 我们正在跟踪这一要求,但目前我们无能为力。

Docker工具箱/ VirtualBox

当通过VirtualBox或任何VirtualBox虚拟机(如Vagrant定义 )运行Docker Toolbox,Docker Machine时,您可以设置“Host-Only Network”并通过它访问Docker VMs网络。

如果您正在使用default boot2docker虚拟机,请不要更改现有的接口,因为您将停止大量的Docker实用程序工作,请添加新的接口。

您还需要通过您的虚拟机的新IP地址从Mac设置路由到容器网络。 在我的情况下,Docker的网络范围是172.22.0.0/16的Host Only适配器IP是192.168.99.100

 sudo route add 172.22.0.0/16 192.168.99.100 

给osx添加一个永久路由有点复杂

然后,您可以从Mac获取容器

 machost:~ ping -c 1 172.22.0.2 PING 172.22.0.2 (172.22.0.2): 56 data bytes 64 bytes from 172.22.0.2: icmp_seq=0 ttl=63 time=0.364 ms --- 172.22.0.2 ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.364/0.364/0.364/0.000 ms 

或者,如果您的容器包含了bash shell,则可以通过它进行访问

docker exec -it <CONTAINER ID> bash

然后你可以ping你的虚拟IP

建立:

PC-A是码头主机, PC-B是网络中的另一台PC。 要从PC-B ping /访问docker的容器,在主机上运行下面的iptables -rules。

 iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT 

注意: eth0是主机的接口, docker0docker0的虚拟默认网桥。

现在在PC-B添加路由

 route add -net <dockerip> netmask <net mask> gw <docker's host> 

直接访问容器服务。