使用 *** 从 Docker 容器内访问专用网络中的资源

Posted

技术标签:

【中文标题】使用 *** 从 Docker 容器内访问专用网络中的资源【英文标题】:Hitting resources in a private network from within a Docker container using *** 【发布时间】:2016-04-07 11:55:50 【问题描述】:

我在 OSX 上运行 Docker 1.9.1,并通过 Cisco AnyConnect *** 连接到我的专用工作网络。我在 Docker 容器中运行的服务连接到工作网络中的数据库,并且无法从容器内部访问,但可以从 OSX 中的容器外部访问。如果我直接连接到工作网络,而不是通过 ***,也可以从容器内访问它。我怀疑我可能需要对 docker-machine 虚拟机进行一些网络配置,但我不确定从这里去哪里。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案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,它可能创建了到堆栈的路由,这与您的 *** 或本地网络路由冲突。

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 命令时要小心:)

【讨论】:

【参考方案3】:

我今天遇到了这个问题,并且无需拆分隧道或其他 *** 客户端(如 OpenConnect)即可让 AnyConnect 工作。只需要一点端口转发。

我的设置

MacOS Sierra 10.12 VirtualBox 5.0.26 Docker 工具箱 1.12.2 docker-***-helper 脚本位于https://gist.github.com/philpodlevsky/040b44b2f8cee750ecc308271cb8d1ab

说明

    上述软件配置在测试时使用。

    确保您没有运行任何虚拟机并且您已与 *** 断开连接。

    修改第 47 行以指定您的不安全注册表或删除“--engine-insecure-registry :5000”参数。

    在 Mac 上的 shell 中执行以下命令:

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

docker run hello-world

【讨论】:

以上是关于使用 *** 从 Docker 容器内访问专用网络中的资源的主要内容,如果未能解决你的问题,请参考以下文章

docker端口映射与容器互联

7.Docker技术入门与实战 --- 端口映射与容器互联

07-docker端口映射与容器关联

Docker修改默认Docker0的网段

没有 --net=host 参数的 docker 容器内的网络无法访问

怎样从外网访问内网Docker容器