【Docker】记录一个docker build时遇到的DNS问题

记录一个docker build时遇到的DNS问题

前言

今天心血来潮将之前写的一篇博客中的Dockerfile更新了一些依赖的版本再构建一次,谁知道遇到一个问题,死活都解决不了。
原博客地址,关于Ubuntu上安装GDAL环境和Java环境的。

问题

---> Running in d70a3f73928c
Err:1 http://security.ubuntu.com/ubuntu yakkety-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu yakkety InRelease
  Temporary failure resolving 'archive.ubuntu.com'

这个问题主要原因是DNS错误无法访问到服务器。在遇到这个问题的第一时间我就检查了宿主机的网络,发现是正常的,ping www.baidu.com 没问题,于是我又重新启动一个测试容器

docker run --rm --network=host alpine ping www.baidu.com

结果是正常的,这个时候我还没没意识到测试其他docker网络,于是便上网查,把查到的结果都试了一遍,无非就是改宿主机的DNS、使用 echo "nameserver 8.8.8.8" > /etc/resolv.conf 将镜像中的DNS地址改成谷歌的、阿里的等等,可是都不生效。改来改去怎么都不行,Dockerfile中的第一句:

apt update

就是无论如何都执行不了,也怪我对docker的知识掌握不够,不知道什么原因导致的。后来突然想起看看docker网络:

docker network ls

发现还有一个叫bridge的网络,遂想起docker网络如果不显式指定网络docker run --network ...的话,会默认使用桥接网络,于是我便测试这个桥接网络:

docker run --rm --network=bridge alpine ping www.baidu.com

我超?终于露出马脚了你,这个网络它不通!
于是又去网上找答案…
后来在不断寻找中终于发现了问题所在,找到 /etc/docker/daemon.json 这个文件,打开它,发现其中有配置:

{
  "registry-mirrors": ["https://{手动打码}.mirror.aliyuncs.com"],
  "iptables": false
}

… 破案了家人们,iptables被我干掉了,也不知道什么时候干掉的,一点印象都没得。
改为"iptables": true,再次构建,这次成功了…

原因

看看GPT哥的解释:

在大多数情况下,Docker 守护进程都需要配置 iptables 规则以确保容器网络的正常工作。因此,禁用 iptables 可能会导致一些网络相关的问题。
特别是,如果您的 Docker 构建问题与网络相关,并且之前遇到了 DNS 解析问题,那么禁用 iptables 可能会进一步加剧这个问题。因为 iptables 负责在主机上进行网络包的过滤和转发,而 Docker 容器也会受到 iptables 规则的影响。

好了,大概就酱~
多学习啊,同志们,不然遇到问题只能 百度 + GPT 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值