适用场景:CentOS 系列 Linux,Docker 安装后无法使用
背景
今天在VMware中新装了一个 Linux (CentOS),在上面尝试使用 Docker,结果一上来就连续踩了权限坑、网络坑和DNS 解析坑。从 Permission denied 到 i/o timeout,再到 Could not resolve host,最后成功拉取 hello-world,把过程记录下来,希望对遇到同样问题的同学有所帮助。
踩坑现场(错误日志还原)
错误一:permission denied 连接 Docker 套接字
当我尝试执行 docker images 时,直接报错:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: ... connect: permission denied
尝试加 sudo,结果系统提示:
liaowl is not in the sudoers file. This incident will be reported.
分析:当前普通用户既不在 docker 用户组,也没有 sudo 权限,导致无法执行任何 Docker 命令。
错误二:网络超时(i/o timeout)
好不容易切换到 root 用户(su -)后,执行 docker search rocketmq:
Error response from daemon: Get "https://index.docker.io/v1/search?q=rocketmq&n=25": dial tcp 69.171.227.37:443: i/o timeout
分析:国内服务器访问 Docker Hub 官方源直连超时,需要配置镜像加速器。
错误三:配置镜像源后依然超时且 curl 解析失败
参考网上的教程配置了 /etc/docker/daemon.json,重启 Docker 后依然卡住。使用 curl 测试镜像源域名:
[root@MiWiFi-R4A-srv ~]# curl -I https://docker.mirrors.ustc.edu.cn
curl: (6) Could not resolve host: docker.mirrors.ustc.edu.cn; Unknown error
[root@MiWiFi-R4A-srv ~]# curl -I https://hub-mirror.c.163.com
curl: (6) Could not resolve host: hub-mirror.c.163.com; Unknown error
分析:明明是国内的镜像源,DNS 却解析不了(可能是运营商 DNS 污染或服务器 DNS 配置问题)。更致命的是,我一开始在 daemon.json 里把文件路径写进了 JSON 内容里,导致格式错误,Docker 根本没加载配置!
根本原因总结
-
权限不足:用户不在
docker组且无sudo权限。 -
网络不通(直连 Docker Hub):国内服务器访问海外官方源超时。
-
镜像源不可达(DNS 解析失败):配置的某些公共镜像源域名在当前网络环境下无法解析。
-
配置文件格式错误:
daemon.json语法错误,导致 Docker 守护进程忽略配置。
解决方案
第 1 步:解决 Docker 权限问题
由于当前用户没有 sudo 权限,直接切 root 用户(如果有 root 密码):
su -
推荐正规做法:如果有 sudo 权限,执行 sudo usermod -aG docker $USER 并将用户加入 docker 组,再重新登录)。
第 2 步:正确编辑 Docker 配置文件
千万不要把文件路径写到 JSON 里面!编辑 /etc/docker/daemon.json
vim /etc/docker/daemon.json
正确的内容格式(我最终使用 Daocloud + 中科大两个源):
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn"
]
}
⚠️ 注意:JSON 格式要求极其严格,最后一个镜像地址后面千万不要加逗号,否则 Docker 重启会失败。
第 3 步:重启 Docker 使配置生效
systemctl daemon-reload
systemctl restart docker
第 4 步:验证配置是否加载成功
执行以下命令查看镜像源是否已生效:
docker info | grep -A 5 "Registry Mirrors"
输出显示:
Registry Mirrors:
https://docker.m.daocloud.io/
https://docker.mirrors.ustc.edu.cn/
说明配置已正确加载。
第 5 步:验证镜像源是否可访问(DNS 与网络层)
curl -I https://docker.m.daocloud.io
返回 HTTP/1.1 302 Moved Temporarily,说明该域名可访问。
第 6 步:拉取测试镜像
docker pull hello-world
最终成功输出:
Using default tag: latest
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:96498ffd522e70807ab6384a5c0485a79b9c7c08ca79ba08623edcad1054e62d
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
特别提醒
-
docker search不受镜像加速器影响
即使配置了加速器,docker search依然会直连 Docker Hub 官方 API。如果你执行docker search还是报超时,这是正常的,并不是配置失效了。搜镜像直接去 Docker Hub 官网 搜更快。 -
DNS 解析问题
如果你配置的镜像源curl提示Could not resolve host,可以尝试修改系统 DNS:echo "nameserver 114.114.114.114" > /etc/resolv.conf然后再次
curl测试。 -
JSON 格式检查
如果重启 Docker 失败,可以用以下命令检查 JSON 语法是否正确:python -m json.tool /etc/docker/daemon.json
最终的可用配置清单
| 文件路径 | 内容 |
|---|---|
/etc/docker/daemon.json | {"registry-mirrors": ["https://docker.m.daocloud.io", "https://docker.mirrors.ustc.edu.cn"]} |
最终也是成功拉取下来了



725

被折叠的 条评论
为什么被折叠?



