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

时间:2016-08-29 23:47:17

标签: ubuntu networking docker

我在我的mac上创建了一个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系统吗?

5 个答案:

答案 0 :(得分:20)

You can't ping or access a container interface directly with Docker for Mac

  

目前最好的解决方案是从您的容器连接   另一个容器。目前我们无法提供路由   由于苹果还没有OSX的问题,这些容器   解决。我们正在跟踪此要求,但我们无法做任何事情   关于它目前。

Docker Toolbox / VirtualBox

通过VirtualBox或任何VirtualBox VM(如a Vagrant definition)运行Docker Toolbox,Docker Machine时,您可以设置"Host-Only Network"并通过它访问Docker VMs网络。

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

您还需要通过VM的新IP地址设置从Mac到容器网络的路由。就我而言,Docker网络范围为172.22.0.0/16,VM上的Host Only适配器IP为192.168.99.100

sudo route add 172.22.0.0/16 192.168.99.100

添加permanent route to 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

答案 1 :(得分:3)

作为替代方案,如果您的容器包含bash shell,则可以通过

访问它

docker exec -it <CONTAINER ID> bash

然后你可以ping你的虚拟IP

答案 2 :(得分:0)

设置:

PC-A a是泊坞主机,PC-B是网络中的另一台PC。要从PC-B ping /访问泊坞窗容器,请在主机中运行以下iptables - 规则。

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

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

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

现在在PC-B

中添加路线
route add -net <dockerip> netmask <net mask> gw <docker's host>

直接ping /访问容器服务。

答案 3 :(得分:0)

它适用于这种情况:

  1. Windows主机
  2. Windows主机上安装的Linux VM
  3. Linux VM主机上安装的Docker容器
  4. 现在你必须注意这一点。容器位于隔离的网络中,但通过Docker容器主机适配器连接到Internet。因此,您必须告诉内核linux在您的网络中可用,然后在Linux VM中:

      

    sysctl net.ipv4.conf.all.forwarding = 1

         

    sudo iptables -P FORWARD ACCEPT

    现在在Windows主机中,您必须为我们的容器网络添加路由: route add&#34; Docker容器网络&#34; &#34; Linux VM IP&#34;例如

    route add 172.17.0.0/16 192.168.1.20

      

    块引用

答案 4 :(得分:0)

假设您在此L-Linux Vbox VM上运行了W-> Windows计算机,L-Linux Vbox VM(eth0,eth1)和docker应用(使用端口8989)。提供者不一定要Vbox或W->赢。您想在浏览器中输入http://app:8989。自动运行vagrant的简便方法,或通过“仅主机适配器”(实际上是eth1)通过端口转发手动配置Vbox VM;通常eth0是Vbox的默认保留的10.0.2.15 IP分配。或者在win / lin / mac上的命令提示符下,通过“ VBoxManage”命令,您可以设置网络或通过脚本自动化。

webtier.vm.network "forwarded_port", guest: 8989, host: 8989

运行docker应用

sudo docker run -p 8989:8989 ...

在Windows资源管理器(W-> Windows计算机)上浏览您的应用程序

http://app:8989

在这种情况下,您仍然无法从W-> Windows计算机上ping docker容器IP“ 172.17.0.2”。这可能会运行跨平台的win / lin / mac。您可能需要查看《 Vbox手册》和《 Vagrant》手册,特别是网络。