在测试服务器上构建镜像时无法联网

在本地可以顺利构建镜像,在测试服务器上却报错了。截图如下:


在测试服务器上构建镜像时无法联网_第1张图片
image.png

在图中可以发现,在Dockerfile执行到pip安装下载依赖时就会卡住。
并不是Dockerfile的编译错误,而是什么“Temporary failure in name resolution”错误。

1.假设服务器网络问题

为了不影响服务器现有环境,我新建一个虚拟环境,执行pip相关依赖的下载。


在测试服务器上构建镜像时无法联网_第2张图片
image.png

发现测试服务器网络是通的。没有问题。

2.由于我使用了pip阿里云镜像源,假设无法解析阿里云镜像源域名。
在测试服务器上构建镜像时无法联网_第3张图片
image.png

经过测试发现,不仅网络是通的,而且延迟相当低。

3.容器内部网络问题

在不断缩小范围后,开始排查容器的网络问题。
经过一番查询,得到如下结果:
docker build镜像时,默认使用网桥(bridge)模式,容器时虚拟环境,没有自己的网卡,所以无法连接网络。
好在docker在构建(build)或者运行(run)镜像时都提供了选择网络的参数,我们可以使用宿主机的网络,也就是这台测试服务器。
经过查询docker的官方文档,找了docker build时设置网络的参数--network


在测试服务器上构建镜像时无法联网_第4张图片
image.png
解决问题

在构建镜像时,在命令最后带上--network host即可。

docker build -t <镜像名> . --network host 
在测试服务器上构建镜像时无法联网_第5张图片
image.png

到此为止,解决问题。

参考资料:
docker build以及docker run时使用host网络的方法
docker 官方文档

你可能感兴趣的:(在测试服务器上构建镜像时无法联网)