欢迎光临
我们一直在努力

Docker 拉取镜像超时与权限问题排查笔记

适用场景: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"]}

    最终也是成功拉取下来了

    赞(0)
    未经允许不得转载:171主机测评 » Docker 拉取镜像超时与权限问题排查笔记
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址