问题背景

自2024年6月6日起,Docker Hub在中国大陆地区被屏蔽,导致直接拉取镜像时出现"Connection reset by peer"等错误。本文教你解决在国内环境中无法正常使用Docker。

解决方案

方案一:配置国内镜像加速器

修改Docker配置文件,使用国内镜像源:

# 创建或编辑配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn",
        "https://mirror.baidubce.com"
    ]
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

注意:建议配置2-4个镜像地址,避免因单个镜像失效导致拉取失败。

方案二:配置Docker代理服务

如果已有可用代理,在daemon.json中添加代理配置:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com"
    ],
    "proxies": {
        "http-proxy": "http://proxy IP:端口",
        "https-proxy": "http://proxy IP:端口"
    }
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

方案三:设置系统环境变量

在Shell配置文件中添加代理环境变量:
例如,使用VMware测试环境,通过宿主机网络连接docker镜像源

# 编辑~/.bashrc或~/.zshrc
echo 'export HTTP_PROXY="http://proxy IP:端口"' >> ~/.bashrc
echo 'export HTTPS_PROXY="http://proxy IP:端口"' >> ~/.bashrc
echo 'export NO_PROXY="localhost,127.0.0.1,*.local,*.cn"' >> ~/.bashrc
# 配置示例
echo 'export HTTP_PROXY="http://192.168.50.87:10808"' >> ~/.bashrc
echo 'export HTTPS_PROXY="http://192.168.50.87:10808"' >> ~/.bashrc
echo 'export all_proxy="socks5://192.168.50.87:10808"' >> ~/.bashrc
echo 'export NO_PROXY="localhost,127.0.0.1,*.local,*.cn"' >> ~/.bashrc
# 使配置生效
source ~/.bashrc

方案四:使用阿里云专属镜像加速器

  1. 登录阿里云控制台
  2. 进入"容器镜像服务"
  3. 获取专属加速器地址
  4. 配置Docker:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://你的专属加速地址.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

方案五:手动下载并传输镜像

当网络完全无法访问时,可通过以下方式:

  1. 在境外服务器操作:
#docker pull 镜像名称:标签
docker pull nginx:latest

#docker save 镜像名称:标签 -o 镜像文件名.tar
docker save nginx:latest -o nginx.tar
  1. 传输镜像文件:
    使用SCP、SFTP等方式将.tar文件传输到国内服务器

  2. 在国内服务器加载镜像:

#docker load -i 镜像文件名.tar
docker load -i nginx.tar

验证方法

配置完成后,通过以下命令验证:

# 查看镜像加速器配置
sudo docker info | grep -A 10 "Registry Mirrors"

# 测试拉取镜像
sudo docker pull hello-world

注意事项

  1. 镜像源时效性:国内镜像地址可能随时失效,建议定期更新配置
  2. proxy稳定性:proxy服务可能不稳定,大文件下载时易中断
  3. Docker版本兼容性:确保使用较新版本的Docker(推荐20.10+)
  4. 清除缓存:配置更改后若仍失败,可尝试清除Docker缓存:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/*
sudo systemctl start docker
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐