Docker容器和主机网络VPN

时间:2015-11-24 21:58:07

标签: networking docker vpn

我正在尝试在启用VPN的情况下在MacOS上运行docker镜像(TUN设备)。 Docker容器可以访问Internet,但无法访问vpn背后的资源。使Docker进入VPN网络的正确方法是什么?

我试过了 docker run --net host使docker共享主机网络,它没有帮助。 主机可以访问VPN资源,docker容器无法解析其名称..

5 个答案:

答案 0 :(得分:14)

将主机连接到VPN后,我不得不重新启动docker。

sudo systemctl restart docker docker start {name-of-container}

答案 1 :(得分:4)

不确定它是否是最佳解决方案。

连接到VPN

后,我使用了主机上显示的DNS
scutil --dns | grep 'nameserver\[[0-9]*\]'
nameserver[0] : xxx.xxx.xxx.xxx

修改过的docker run命令:

docker run --cidfile="docker.pid" --dns=xxx.xxx.xxx.xxx --publish-all

现在,docker容器可以访问VPN背后的资源......它可以工作,但我不知道它是好还是坏......

答案 2 :(得分:2)

有类似的问题。 OP的解决方案有效,但只需重新启动我的docker vm:

docker-machine restart $host

灵感:https://www.reddit.com/r/docker/comments/39z4xd/when_my_docker_host_is_connected_to_vpn_i_can_no/

答案 3 :(得分:1)

我遇到了这个确切的问题。我尝试了此处建议的其他解决方案,但它们对我不起作用。经过大量试验和错误,此解决方案非常有效:

在 daemon.json 配置文件中添加 "bip": "192.168.1.5/24"。该文件可以在 docker 引擎下的 docker 桌面设置或 /etc/docker/daemon.json 中找到。 BIP 是桥接 IP 地址的设置,将更改 docker 在其子网中分配的 IP。通过更改此设置,我避免了 VPN 和 docker ip 地址之间的冲突。

重启 docker 守护进程。

停止所有容器。

运行‘docker network prune’以删除未使用的网络。

重启所有容器。这将使用新的 IP 地址重新创建他们的网络。

以后连接VPN后可能还需要重启docker。有关其他解决方案和想法,请参阅此主题:https://github.com/docker/for-mac/issues/2820

答案 4 :(得分:0)

对我有用的是将 docker 子网掩码从 /24 更改为 /28,然后重新启动,我现在可以在我的 vpn 网络上执行 ping、telnet 和其他操作。它说默认值是 /28,但 docker desktop 附带了 /24。也许是打字错误,我不知道。