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

Nei*_*eil 17 macos 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
Run Code Online (Sandbox Code Playgroud)

我将端口设置为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,
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mat*_*att 23

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

目前最好的解决方案是从另一个容器连接到您的容器.目前,由于Apple尚未解决的OSX问题,我们无法为这些容器提供路由.我们正在跟踪这个要求,但目前我们无法做任何事情.

Docker Toolbox/VirtualBox

当通过VirtualBox运行Docker Toolbox,Docker Machine或任何VirtualBox VM(如Vagrant定义)时,您可以设置"仅主机网络"并通过它访问Docker VMs网络.

如果您使用的是defaultboot2docker VM,请不要更改现有界面,因为您将停止使用大量Docker实用程序,添加新界面.

您还需要通过VM的新IP地址设置从Mac到容器网络的路由.在我的例子中,Docker网络范围是172.22.0.0/16VM上的Host Only适配器IP 192.168.99.100.

sudo route add 172.22.0.0/16 192.168.99.100
Run Code Online (Sandbox Code Playgroud)

向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
Run Code Online (Sandbox Code Playgroud)


小智 5

或者,如果您的容器装有bash外壳,则可以通过以下方式访问它

docker exec -it <CONTAINER ID> bash

然后您可以ping您的虚拟IP


小智 5

它在这种情况下起作用:

  1. Windows主机
  2. 安装在 Windows 主机上的 Linux 虚拟机
  3. 安装在 Linux VM 主机上的 Docker 容器

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

# sysctl net.ipv4.conf.all.forwarding=1
# sudo iptables -P FORWARD ACCEPT
Run Code Online (Sandbox Code Playgroud)

现在,在 Windows 主机中,您必须为我们的容器网络添加一条路由:例如,route add "Docker container network" "Linux VM IP"

# route add 172.17.0.0/16 192.168.1.20
Run Code Online (Sandbox Code Playgroud)