Ubuntu 在VPN背后构建docker

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

在我现在所在的项目中,我们在VPN后面设置了Github Enterprise,因此我使用OpenVPN连接我的桌面(Ubuntu 14.04 LTS),但当我尝试使用Docker(使用Centos6)构建时,我总是得到
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
选项(请参阅)to
docker 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时,它工作了。我不知道这意味着什么,但至少是向前迈出了一步。谢谢你,我成功了!太完美了!!多谢各位