使用VPN在Docker容器内访问专用网络中的资源

时间:2016-01-03 20:57:33

标签: networking docker vpn docker-machine

我在OSX上运行Docker 1.9.1,并且我使用Cisco AnyConnect VPN连接到我的私人工作网络。我在Docker容器中运行的服务连接到工作网络中的数据库,并且无法从容器内访问,但可以从OSX中的容器外部访问。如果我直接连接到工作网络,而不是通过VPN连接,也可以从容器内访问。我怀疑我可能不得不使用docker-machine VM进行一些网络配置,但我不确定从哪里开始。

3 个答案:

答案 0 :(得分:4)

如果您使用Virtualbox作为docker-machines的虚拟机管理程序,我建议您将网络模式设置为桥接适配器。这样,您的VM将像您自己的计算机一样单独连接到网络。另外,要收集更多信息以进行故障排除,请尝试从容器计算机命令行ping数据库主机。使用docker exec -it <container-name> /bin/bash

答案 1 :(得分:2)

使用

检查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

如果您创建了大量网络,即使用docker-compose它可能已创建到堆栈的路由,这会与您的VPN或本地网络路由冲突。

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;博士

使用

删除所有网络 应该
docker network rm $(docker network ls -q)

因为默认情况下不会删除活动网络...但是在运行 rm 命令时要小心:)

答案 2 :(得分:2)

我今天遇到了这个问题,并且无需拆分隧道或OpenConnect等其他VPN客户端即可使用AnyConnect。所需要的只是一些端口转发。

我的设置

说明

  1. 测试时使用了上述软件配置。

  2. 确保您没有运行任何虚拟机,并且您已从VPN断开连接。

  3. 修改第47行以指定您的不安全注册表或删除&#34; - engine-insecure-registry:5000&#34;参数。

  4. 在Mac上的shell中执行以下操作:

  5. sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist

    MacOS Sierra的解决方法。出于某种原因,启用NTP会导致docker引擎挂起。参见:

    https://forums.docker.com/t/docker-beta-for-mac-does-not-work-and-hangs-frequently-on-macos-10-12/18109/7

    ./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并测试docker:

    docker run hello-world