Ubuntu 在VPN背后构建docker
在我现在所在的项目中,我们在VPN后面设置了Github Enterprise,因此我使用OpenVPN连接我的桌面(Ubuntu 14.04 LTS),但当我尝试使用Docker(使用Centos6)构建时,我总是得到Ubuntu 在VPN背后构建docker,ubuntu,docker,vpn,centos6,Ubuntu,Docker,Vpn,Centos6,在我现在所在的项目中,我们在VPN后面设置了Github Enterprise,因此我使用OpenVPN连接我的桌面(Ubuntu 14.04 LTS),但当我尝试使用Docker(使用Centos6)构建时,我总是得到ssh:无法解析主机名Github.xxx.xxx:名称或服务未知 我看过Docker文档,但它似乎只是使用代理或网桥来解决问题,而Google只返回关于如何在Docker映像上设置OpenVPN的答案 然后我转向Stackoverflow,希望得到一个关于如何运行SudoDoc
ssh:无法解析主机名Github.xxx.xxx:名称或服务未知
我看过Docker文档,但它似乎只是使用代理或网桥来解决问题,而Google只返回关于如何在Docker映像上设置OpenVPN的答案
然后我转向Stackoverflow,希望得到一个关于如何运行SudoDocker build image
并使用我的VPN从Github克隆的答案
此外,我们的Mac用户已经安装了Boot2Docker,构建映像没有问题。这可能是两个问题之一: 1) 域名系统 2) 桌面的路由表 我的具体案例(也是Ubuntu 14.04)是路由表。这就是我下面经历的 要确定DNS是否存在问题,您能否从容器内部成功ping一个IP
docker run -i -t ubuntu:14.04 /bin/bash
root@44445bfefc4e:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=76.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=75.6 ms
如果这样做有效,并且当您连接到VPN时,您的容器仍然无法伸出,请查看您的路由
断开与VPN的连接,并使用route
检查您的路由。以下是我的输出作为示例:
Destination Gateway Genmask Flags Metric Ref Use Iface
default DD-WRT 0.0.0.0 UG 0 0 0 wlan0
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
192.168.1.0 * 255.255.255.0 U 9 0 0 wlan0
192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
在那里,您将看到Docker的网络(172.17.0.0
)
现在,连接到您的VPN并重新发出命令。您的里程可能会有所不同,但我发现路线表中有重复条目:
172.17.0.0 * 255.255.0.0 U 0 0 0 vpn0
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
服务器正在推送重复的路由
在我的例子中,我不需要这些路由来成功导航VPN,所以我找到了一种禁用它们的方法。我使用OpenVPN,因此我深入查看对话框中的设置并选中“忽略自动获取的路由”
那张照片是我的
一旦我检查并重新连接到VPN,我就不再有重复条目,我的Docker容器能够连接到Internet和VPN内的主机。如果我理解正确,您希望在构建Docker映像期间通过VPN访问svn存储库,即Dockerfile的其中一条指令必须解析主机名 如果您的问题与域名解析有关,您可以使用
--addhost
选项(请参阅)todocker build
将IP显式映射到相关主机名。请注意,它可能需要相对较高的docker版本
docker build --add-host host_name:host_IP .
看看有用的东西。我尝试了各种各样的东西,最后最简单的东西在Ubuntu 18.04上有所帮助。停止和启动docker deamon 先决条件:关闭VPN
sudo systemctl stop docker
---> Start VPN
sudo systemctl start docker
希望可以帮助他人。遗憾的是,我的routes表中没有任何副本,而且我忘了提到我的Docker映像基于Centos6。你知道问题是DNS还是你甚至无法使用IPs访问容器外部?我可以ping“正常”站点,如google.com或8.8.8.8,我就是不能ping VPN后面的站点。我的同事认为可能是docker使用了错误的网关,但我在周一之前没有时间检查它。在标准安装中,docker通过它设置的桥。可能是网关配置错误,但我不相信它。你能直接ping主机吗?例如,您的内部Github是否通过其IP?我还记得过去必须通过编辑
/etc/defaults/docker.io
添加docker\u OPTS=--DNS解决DNS问题。我没有尝试从docker实例中ping IP。所以当我ping IP时,它工作了。我不知道这意味着什么,但至少是向前迈出了一步。谢谢你,我成功了!太完美了!!多谢各位