sudo docker pull 是由 Docker 守护进程(dockerd) 执行的。Docker 守护进程是一个独立的系统服务,它并不会读取你当前终端的环境变量。

针对 Ubuntu 24.04 系统,有以下几种解决办法:

方法一:配置 Docker 守护进程代理(最推荐,支持 SOCKS5)

这是解决 docker pull 失败的根本方法。你需要为 Docker 服务创建专门的代理配置文件。

  1. 创建配置目录:

    sudo mkdir -p /etc/systemd/system/docker.service.d
    
  2. 创建代理配置文件:
    使用你自己的代理地址(192.168.18.137:7890)。建议使用 socks5h,这样 DNS 解析也会通过代理,防止 DNS 污染。

    sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
    
  3. 粘贴以下内容:

    [Service]
    Environment="HTTP_PROXY=socks5h://192.168.1.1:8000"
    Environment="HTTPS_PROXY=socks5h://192.168.1.1:8000"
    Environment="NO_PROXY=localhost,127.0.0.1"
    
  4. 保存并重启 Docker 服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  5. 验证配置是否生效:
    执行 sudo docker info | grep Proxy,看到输出中有你设置的代理地址即可。然后再尝试执行 pull 命令。


方法二:使用国内镜像加速器(2026年最新现状)

由于国内网络环境波动,许多老旧的公开加速器(如中科大、网易等)已失效或受限。如果方法一仍有问题,可以尝试使用目前较稳定的第三方镜像源。

修改 /etc/docker/daemon.json 文件:

sudo nano /etc/docker/daemon.json

添加或修改为以下内容(请注意 JSON 格式):

{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://dockerproxy.com",
    "https://docker.m.daocloud.io"
  ]
}

保存后重启:sudo systemctl restart docker


方法三:使用 docker-dragskopeo(无需 Docker 进程)

如果你不想修改 Docker 配置,可以使用一些第三方工具直接下载镜像包,然后再导入。

  • 使用 Skopeo (推荐):
    skopeo 是一个可以直接通过命令行下载镜像的工具,它会直接读取终端的环境变量。
    # 安装
    sudo apt update && sudo apt install skopeo -y
    
    # 导出环境变量
    export https_proxy="http://192.168.18.137:7890"
    
    # 下载镜像为 tar 包
    skopeo copy docker://rocm/dev-ubuntu-24.04:7.2-complete docker-archive:rocm_image.tar
    
    # 导入 Docker
    sudo docker load -i rocm_image.tar
    

常见排查点:

  • 防火墙: 确保 192.168.18.137 这台代理机器的 7890 端口对你的电脑是开放的。
  • 代理软件设置: 如果你使用的是 Clash 等工具,请确保开启了“允许局域网连接”(Allow LAN)。
  • DNS 延迟: ROCm 的镜像非常大(通常几 GB 到十几 GB),如果代理不稳定容易超时。建议优先使用方法一中的 socks5h