京东云服务器安装Docker后如何配置国内镜像提速?

在京东云服务器(或其他国内云主机)上安装 Docker 后,默认拉取镜像的官方仓库地址 registry-1.docker.io 位于海外,受网络波动影响速度较慢。配置国内镜像提速是提升开发效率的关键步骤。

以下是针对 Docker CE 的标准配置流程,推荐使用阿里云或腾讯云提供的免费镜像提速器。

第一步:获取镜像提速地址

目前最常用且稳定的国内镜像源包括阿里云和腾讯云。你需要先登录对应云平台控制台获取专属提速地址。

  • 阿里云:访问 阿里云容器镜像服务 -> 镜像提速 -> 复制你的专属提速地址(格式类似 https://xxxxx.mirror.aliyuncs.com)。
  • 腾讯云:访问 腾讯云容器镜像服务 -> 实例列表 -> 点击实例 -> 镜像提速 -> 复制提速地址。

注意:请确保你的账号已实名认证,否则可能无法生成提速地址。

第二步:修改 Docker 配置文件

使用 root 权限编辑 Docker 的守护进程配置文件 /etc/docker/daemon.json。如果该文件不存在,则新建一个。

sudo vim /etc/docker/daemon.json

在文件中加入以下内容(将 <你的提速地址> 替换为第一步中获取的实际地址):

{
  "registry-mirrors": [
    "<你的提速地址>"
  ]
}

示例(假设你使用的是阿里云的地址):

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn", 
    "https://<your-id>.mirror.aliyuncs.com"
  ]
}

提示

  1. 如果已有其他配置(如 insecure-registries),请保持 JSON 语法正确,用逗号分隔不同项。
  2. 建议同时保留中科大镜像作为备用,以防单一源失效。
  3. 确保 JSON 格式无误(特别是逗号的位置和花括号闭合),否则 Docker 将无法启动。

第三步:重启 Docker 服务

配置完成后,必须重启 Docker 服务使配置生效。

# 对于 systemd 系统(大多数 Linux 发行版,如 CentOS 7+, Ubuntu 16.04+)
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置是否生效
docker info | grep "Registry Mirrors"

如果输出中显示了你配置的提速地址,说明配置成功。

第四步:验证提速效果

尝试拉取一个大型镜像(如 nginx),观察下载速度:

docker pull nginx:latest

正常情况下,从阿里云或腾讯云的节点拉取,速度应能达到几十 MB/s,远快于直接连接国外源。


常见问题与替代方案

1. 配置后依然很慢怎么办?

  • 检查 DNS:有时网络解析问题会导致连接超时。可以尝试修改 /etc/resolv.conf,添加公共 DNS(如 8.8.8.8114.114.114.114),但需注意部分云厂商限制自定义 DNS。
  • 更换源:如果当前使用的阿里云/腾讯云地址不稳定,可以切换为中科大(USTC)、清华大学或网易的公共镜像源(这些不需要注册账号,但高峰期可能拥堵)。
    • 中科大源:https://docker.mirrors.ustc.edu.cn
    • 清华源:https://docker.mirrors.tuna.tsinghua.edu.cn
  • HTTPS 证书问题:某些旧版本的 Docker 可能对 HTTPS 证书校验严格,如果遇到证书错误,可在 daemon.json 中添加 "insecure-registries": ["<提速地址域名>"](仅限测试环境,生产环境慎用)。

2. 关于 containerd (Docker 23.0+ 版本)

较新版本的 Docker 默认使用 containerd 作为底层运行时。虽然上述 daemon.json 配置通常仍然有效,但如果遇到拉取失败,也可以单独配置 containerd 的提速:

  1. 找到配置文件 /etc/containerd/config.toml
  2. [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加对应的 mirror 配置(格式略有不同,需参考 containerd 文档)。
  3. 执行 sudo systemctl restart containerd

通常情况下,优先保证 docker daemon.json 配置正确即可解决绝大多数问题。