在 VPN 后面构建 docker

Kyr*_*ann 12 ubuntu vpn centos6 docker

在我现在所在的项目中,我们在 VPN 后面设置了 Github Enterprise,所以我使用 OpenVPN 连接我的桌​​面(Ubuntu 14.04 LTS),但是当我尝试使用 Docker(使用 Centos6)构建时,我总是得到ssh: Could not resolve hostname github.xxx.xxx: Name or service not known.

我查看了 Docker 文档,但看起来它只是使用代理或网桥解决问题,而 Google 只返回有关如何在 Docker 映像上设置 OpenVPN 的答案。

然后我转向 Stackoverflow 并希望得到关于如何运行sudo docker build image并让它使用我的 VPN 从 Github 克隆的答案。

此外,我们的 Mac 用户已经安装了 Boot2Docker,并且构建镜像没有问题。

小智 10

我尝试了各种方法,最后最简单的方法对 Ubuntu 18.04 有所帮助。停止和启动 docker 守护进程。

先决条件:VPN 关闭

sudo systemctl stop docker

---> Start VPN

sudo systemctl start docker
Run Code Online (Sandbox Code Playgroud)

希望会帮助某人。


jmo*_*n12 5

如果我理解正确,您希望在构建 docker 镜像期间通过 VPN 访问 svn 存储库,即 Dockerfile 的指令之一必须解析主机名。

如果您的问题与域名解析有关,您可以使用--add-host选项(请参阅文档docker-build将 IP 显式映射到相关主机名。请注意,它可能需要相对较高的 docker 版本。

docker build --add-host host_name:host_IP .
Run Code Online (Sandbox Code Playgroud)

另请参阅有用的相关帖子


小智 4

这可能是两个问题之一:

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
Run Code Online (Sandbox Code Playgroud)

如果这种方法可行,但在您连接到 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
Run Code Online (Sandbox Code Playgroud)

在那里,您将看到 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
Run Code Online (Sandbox Code Playgroud)

服务器正在推送重复的路由!

就我而言,我不需要这些路由来成功导航 VPN,因此我找到了禁用它们的方法。我使用 OpenVPN,因此我深入查看对话框中的设置并选中“忽略自动获取的路由”。

在此输入图像描述

该图片来自这篇博文

检查并重新连接到 VPN 后,我不再有重复的条目,并且我的 Docker 容器能够连接到 Internet 和 VPN 内的主机。