使用VPN从Docker容器中打开专用networking中的资源
我在OSX上运行Docker 1.9.1,并使用Cisco AnyConnect VPN连接到我的私人工作networking。 我在Docker容器中运行的服务连接到工作networking中的数据库,并且在容器内不可访问,但可以从OSX容器外部访问。 如果我直接连接到工作networking,也可以从容器内访问,而不是通过VPN。 我怀疑我可能不得不使用docker-machine虚拟机做一些networkingconfiguration,但是我不知道该从哪里下载。
如果您使用Virtualbox作为Docker机器的pipe理程序,我build议您将networking模式设置为桥接适配器 。 这样,您的虚拟机将像您自己的机器一样单独连接到networking。 也收集更多的信息进行故障排除尝试从容器机命令行ping分贝主机。 使用docker exec -it <container-name> /bin/bash
在Docker Machine VM中检查你的路由
docker-machine ssh default $ route -n
在新的机器上看起来像这样:
docker@default:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 1 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
如果你创build了很多networking,比如使用docker-compose
它可能创build了堆栈的路由,这与你的VPN或本地networking路由有冲突。
docker@dev15:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 1 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7400365dbd39 172.25.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4db568a601b4 [...] 192.168.80.0 0.0.0.0 255.255.240.0 U 0 0 0 br-97690a1b4313 192.168.105.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
TL;博士
删除所有networking应该是安全的
docker network rm $(docker network ls -q)
因为活动networking在默认情况下不会被删除…但是在运行rm命令时要小心:)
我今天遇到了这个问题,让AnyConnect工作,而不需要拆分隧道或像OpenConnect这样的其他VPN客户端。 它只需要一点端口转发。
我的设置
- MacOS Sierra 10.12
- VirtualBox 5.0.26
- Docker ToolBox 1.12.2
- docker-vpn-helper脚本,位于https://gist.github.com/philpodlevsky/040b44b2f8cee750ecc308271cb8d1ab
说明
-
testing时使用上述软件configuration。
-
确保没有任何虚拟机正在运行,并且您已经与VPN断开连接。
-
修改第47行以指定不安全的registry或删除“–engine-insecure-registry:5000”参数。
-
在Mac上的shell中执行以下操作:
sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
MacOS Sierra的解决方法。 由于某些原因启用了NTP会导致docker引擎挂起。 看到:
./docker-vpn-helper
设置端口转发,重新生成TLS证书。
请注意脚本发出的以下行,您需要将它们剪切并粘贴到您的shell中。
export DOCKER_HOST=tcp://localhost:2376 export DOCKER_CERT_PATH=/Users/<username>/.docker/machine/machines/default export DOCKER_MACHINE_NAME=default
连接到您的AnyConnect VPN并testingdocker:
docker run hello-world