Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Can';从Docker容器中ping特定子网_Macos_Docker - Fatal编程技术网

Macos Can';从Docker容器中ping特定子网

Macos Can';从Docker容器中ping特定子网,macos,docker,Macos,Docker,创建容器后(不管是哪一个),我使用以下方法输入容器: docker exec -it <container_name> /bin/bash 使用Docker CE 17.09.1-CE-mac42(21090)运行macOS High Sierra 知道发生了什么吗?一定有路由器或防火墙在某处阻塞。如果你想有一个好的开始,从你的mac电脑上,做一个traceroute 172.20。。查看与这些服务器联系的路径。因为它是不同的网络,所以它必须是一个路由问题。Docker正在使用其网

创建容器后(不管是哪一个),我使用以下方法输入容器:

docker exec -it <container_name> /bin/bash
使用Docker CE 17.09.1-CE-mac42(21090)运行macOS High Sierra


知道发生了什么吗?

一定有路由器或防火墙在某处阻塞。如果你想有一个好的开始,从你的mac电脑上,做一个traceroute 172.20。。查看与这些服务器联系的路径。因为它是不同的网络,所以它必须是一个路由问题。Docker正在使用其网关172.18.0.1处理其背后的任何内容,因此也有必要检查托管它的机器的内部防火墙。另一种快捷方式是授予docker容器与主机相同的网络权限,尽管出于安全考虑,在某些情况下不建议这样做。根据,它允许容器共享主机的网络堆栈:

docker run-it--network=“host”/bin/bash

**同样,要非常小心这样做的安全影响

否则,您必须像Michael Manuel Vandycke指出的那样解决路由问题,或者可能创建一个类似于默认docker0网桥的新网桥(就像您在主机上键入“ifconfig”时看到的那样)。然后,您可以确保网桥具有到您要查找的子网的路由


我可以想到几种可能性:

最简单的方法是在docker启动后更改主机上的网络。您需要重新启动docker以获取wifi连接、VPN等的更改

更常见的问题是docker网络是否与实际网络重叠。发生这种情况时,来自容器的请求将路由到docker网络,而不是外部网络。在您的情况下,如果到
172.20.*.
的路线通过
172.18.x.x
上的网关,您将无法达到目标。
172.20.x.x
上无法直接看到的其他docker网络也可能导致问题。使用以下命令调试此命令:

docker network inspect $(docker network ls -q) \
  --format '{{.Name}}: {{if .IPAM.Config}}{{(index .IPAM.Config 0).Subnet}}{{end}}' 
将其与主机上的路由进行比较(
ipr
)。如果您看到到
172.20.*.
的路线重叠,那就是您的问题。为了解决这个问题,从18.06开始,您可以告诉docker从一个池中生成网桥网络,该池在daemon.json文件中包含以下内容(也可以在桌面上的daemon->advanced菜单中获得):

选择您不会遇到的子网,例如,如果您使用笔记本电脑,请确保家庭、办公室、咖啡馆、酒店、VPN等都使用不同的网络。对于swarm模式,从18.09开始创建swarm时,它具有类似的设置:

$ docker swarm init \
  --default-addr-pool 10.20.0.0/16 \
  --default-addr-pool 10.40.0.0/16 \
  --default-addr-pool-mask-length 24

我在tips and tricks talk中描述了这些命令以及其他常见问题:

traceroute从mac到172.20.*.*服务器没有显示任何有趣的内容-它只是通过默认网关。如果网络中有防火墙,主机也无法访问该服务器,不是吗?我还确保Mac电脑的防火墙已关闭,所以我认为这不是问题所在。你有没有找到解决办法?我现在遇到了完全相同的问题…@AndrewPlank不幸的是没有…请尝试“docker network ls”,然后针对任何网络“docker inspect networkName | grep Subnet”。可能您有一个docker网络子网“172.20.0.0/16”。
{
    "bip": "10.16.100.1/24",
    "default-address-pools":[
      {"base":"10.17.0.0/16","size":24},
      {"base":"10.20.0.0/16","size":24}
    ]
}
$ docker swarm init \
  --default-addr-pool 10.20.0.0/16 \
  --default-addr-pool 10.40.0.0/16 \
  --default-addr-pool-mask-length 24