You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04下Docker拉取镜像失败(DNS连接被拒)但hello-world可正常运行的解决方法咨询

Ubuntu 22.04下Docker拉取镜像失败(DNS连接被拒)但hello-world可正常运行的解决方法咨询

嘿,我看你遇到了个挺棘手的小问题——Docker能正常跑hello-world,但拉取cassandra这类镜像时就报DNS连接被拒的错。别慌,咱们一步步拆解排查:

先搞清楚问题根源

hello-world能正常运行大概率是因为它已经在本地存在了(要么是Docker安装时自动预装的,要么你之前成功拉取过),所以不需要再去Docker Hub请求;而cassandra是首次拉取,必须连接Docker Hub的registry,这时候DNS解析的问题就暴露出来了。

排查步骤&解决方法

1. 先验证主机系统的DNS是否正常

先在你的服务器上直接测试DNS解析,看看是不是系统层面的DNS出了问题:

nslookup registry-1.docker.io
# 或者用dig命令
dig registry-1.docker.io
  • 如果这两个命令也返回类似“connection refused”的错误,那问题出在系统DNS配置,直接跳到第3步;
  • 如果能正常解析出IP地址,那问题就出在Docker自身的DNS设置,看第2步。

2. 调整Docker的DNS配置

Docker默认会使用主机的DNS,但有时候会出现不兼容的情况,咱们手动指定公共DNS服务器试试:

  • 创建或编辑Docker的守护进程配置文件/etc/docker/daemon.json
sudo nano /etc/docker/daemon.json
  • 在文件里添加以下内容(用谷歌的公共DNS,也可以换成你信任的其他DNS):
{
  "dns": ["8.8.8.8", "8.8.4.4"]
}
  • 保存退出后,重新加载Docker配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 现在再尝试拉取镜像:
sudo docker pull cassandra:latest

3. 修复系统层面的DNS问题

如果主机的DNS解析也失败,那咱们得先把系统DNS弄好:

  • 先检查systemd-resolved服务(Ubuntu 22.04默认用这个管理DNS)是否正常运行:
sudo systemctl status systemd-resolved
  • 如果服务没启动,先启动并设为开机自启:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
  • 要是还是不行,咱们可以直接修改/etc/resolv.conf(注意:有些系统里这个文件是自动生成的,修改后可能会被覆盖,临时测试可以这么做):
sudo nano /etc/resolv.conf
  • 把里面的nameserver改成公共DNS,比如:
nameserver 8.8.8.8
nameserver 8.8.4.4
  • 保存后再测试DNS解析,没问题的话再去拉Docker镜像。

额外小提示

如果上面的方法都试过还是不行,可以检查一下服务器的防火墙或者安全组设置,看看是不是53端口(DNS服务端口)被屏蔽了,不过这种情况相对少见。

备注:内容来源于stack exchange,提问作者Raphael10

火山引擎 最新活动