在国内使用 Docker 时,最常遇到的问题不是命令不会写,而是镜像拉不下来:docker pull 长时间没有进度,最后出现超时、连接重置,或者访问 Docker Hub 失败。
一种常见解决办法是给 Docker 配置国内镜像加速地址。本文以 https://docker.1ms.run 为例,分别介绍 Docker Desktop 和 Linux Docker Engine 的配置方法。
使用前说明
docker.1ms.run是第三方镜像服务,并非 Docker 官方服务。服务的可用性、免费额度和使用规则可能变化,请以镜像站当前说明为准。生产环境还应考虑镜像可信度、供应链安全和内部缓存方案。
镜像加速的原理
正常情况下,执行下面的命令会从 Docker Hub 拉取镜像:
docker pull nginx:latest配置 registry-mirrors 后,Docker 守护进程会优先尝试指定的镜像站。日常命令通常不用改变,仍然可以继续执行 docker pull nginx:latest。
本文使用的配置内容是:
{ "registry-mirrors": [ "https://docker.1ms.run" ]}如果你的 Docker 已有其他配置,需要把 registry-mirrors 合并进去,不能直接用上面的内容覆盖整个文件。
一、Docker Desktop 配置方法
这一方法适用于 Windows 和 macOS 上的 Docker Desktop,Linux 版 Docker Desktop 的设置界面也基本相同。
1. 打开 Docker Engine 设置
启动 Docker Desktop,然后依次进入:
Settings → Docker Engine
右侧会显示 Docker Engine 当前使用的 JSON 配置。默认内容可能不止一项,以你电脑上的实际内容为准。
2. 添加镜像地址
如果当前配置接近下面这样:
{ "features": { "containerd-snapshotter": true }}可以在顶层加入 registry-mirrors:
{ "features": { "containerd-snapshotter": true }, "registry-mirrors": [ "https://docker.1ms.run" ]}注意 JSON 格式:相邻字段之间要有英文逗号,最后一个字段后面不要多写逗号。
3. 保存并重启
点击 Apply & restart。Docker Desktop 会校验配置并重启 Docker Engine。
重启完成后,在 PowerShell、Windows Terminal 或 macOS 终端中执行:
docker info在输出中找到 Registry Mirrors。如果能看到以下地址,说明配置已经被 Docker 读取:
Registry Mirrors: https://docker.1ms.run/然后实际拉取一个小镜像测试:
docker pull hello-worlddocker run --rm hello-worldDocker Desktop 配置失败怎么恢复
如果点击保存后 Docker 无法启动,重新进入 Settings → Docker Engine,删除刚才加入的 registry-mirrors 字段,恢复原来的 JSON 后再次应用。
最常见的原因是 JSON 少了逗号、多了逗号,或者误删了原有的大括号。修改前可以先把原配置复制到记事本中备份。
二、Linux Docker Engine 配置方法
普通 Linux Docker Engine 默认读取:
/etc/docker/daemon.json如果该文件不存在,可以创建;如果已经存在,需要在原配置中合并字段。
1. 备份已有配置
先查看文件是否存在:
sudo ls -l /etc/docker/daemon.json如果存在,先备份:
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak2. 编辑 daemon.json
创建配置目录并使用编辑器打开文件:
sudo mkdir -p /etc/dockersudo nano /etc/docker/daemon.json新文件可以直接填写:
{ "registry-mirrors": [ "https://docker.1ms.run" ]}如果原文件中已经设置了日志、存储目录或其他参数,应保留这些字段。例如:
{ "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "registry-mirrors": [ "https://docker.1ms.run" ]}在 nano 中按 Ctrl+O 保存,按回车确认文件名,再按 Ctrl+X 退出。
3. 重启 Docker
对于使用 systemd 的 Ubuntu、Debian、CentOS、Rocky Linux 等常见发行版,执行:
sudo systemctl daemon-reloadsudo systemctl restart dockersudo systemctl status docker --no-pager如果状态显示 active (running),说明 Docker 已正常启动。
4. 验证配置
执行:
docker info | sed -n '/Registry Mirrors/,+3p'正常情况下会显示:
Registry Mirrors: https://docker.1ms.run/再拉取镜像测试:
docker pull hello-worlddocker run --rm hello-world三、Linux rootless Docker 的区别
如果你安装的是 rootless Docker,即 Docker 守护进程以普通用户身份运行,配置文件通常不是 /etc/docker/daemon.json,而是:
~/.config/docker/daemon.json配置内容相同:
{ "registry-mirrors": [ "https://docker.1ms.run" ]}然后重启用户级 Docker 服务:
systemctl --user daemon-reloadsystemctl --user restart docker如果设置了 XDG_CONFIG_HOME,实际路径应为 $XDG_CONFIG_HOME/docker/daemon.json。
四、不修改全局配置,直接替换镜像地址
如果只是临时下载一个镜像,也可以在镜像名称前直接加镜像站域名:
docker pull docker.1ms.run/nginx:latest在 compose.yaml 中也可以显式填写:
services: web: image: docker.1ms.run/nginx:latest这种方式简单直接,但镜像名称会变成带有第三方仓库域名的完整名称。以后切换镜像站时,还要修改命令或 Compose 文件。
五、GHCR、Kubernetes 等镜像怎么处理
registry-mirrors 主要用于 Docker Hub,不能默认认为它会透明加速所有仓库。
例如,原镜像来自 GitHub Container Registry:
docker pull ghcr.io/linuxserver/webtop:latest按照毫秒镜像当前说明,需要显式替换为对应通道:
docker pull ghcr.1ms.run/linuxserver/webtop:latestregistry.k8s.io、gcr.io、quay.io 等也各有不同的替换域名和权限要求,其中部分通道可能需要付费。使用前应查看镜像站最新支持列表,不要简单地把所有域名都替换成 docker.1ms.run。
六、常见问题排查
docker info 中没有 Registry Mirrors
先确认修改的是当前 Docker 实例所使用的配置:
- Docker Desktop 应在 Settings → Docker Engine 中修改;
- 普通 Linux Docker Engine 通常使用
/etc/docker/daemon.json; - rootless Docker 通常使用
~/.config/docker/daemon.json; - 修改后需要重启对应的 Docker Engine。
Docker 重启失败
查看日志:
sudo journalctl -u docker -n 100 --no-pager如果提示无法解析配置,通常是 JSON 格式错误。可以恢复备份:
sudo cp /etc/docker/daemon.json.bak /etc/docker/daemon.jsonsudo systemctl restart docker配置成功但拉取仍然很慢
可能原因包括:
- 镜像站暂时不可用、拥堵或触发额度限制;
- DNS 解析异常;
- 要拉取的镜像并不在 Docker Hub;
- 镜像包含较大的层,首次回源仍需等待;
- 公司、校园或云服务器网络策略限制了相关域名。
可以先测试镜像站是否能够访问,再查看 Docker 日志中的实际错误。不要随意加入 insecure-registries,本文示例使用 HTTPS,不需要关闭 TLS 校验。
docker pull 和 docker compose 是否都生效
只要 Compose 使用的是同一个 Docker Engine,针对 Docker Hub 的 registry-mirrors 配置通常会同时作用于 docker pull 和 docker compose pull。如果 Compose 文件已经写了其他仓库的完整域名,则仍会访问那个仓库。
七、如何删除镜像源
不再使用时,从 Docker Engine JSON 中删除:
"registry-mirrors": [ "https://docker.1ms.run"]注意同时处理相邻字段的逗号,然后重启 Docker。
Linux 用户也可以恢复之前的备份:
sudo cp /etc/docker/daemon.json.bak /etc/docker/daemon.jsonsudo systemctl restart docker总结
如果你使用 Docker Desktop,进入 Settings → Docker Engine 添加 registry-mirrors;如果使用普通 Linux Docker Engine,则编辑 /etc/docker/daemon.json 并重启 Docker。
配置后不要只看命令是否执行成功,最好同时使用 docker info 检查镜像源是否被读取,再拉取 hello-world 做实际测试。镜像站是解决网络问题的实用工具,但第三方服务状态可能变化,重要环境应保留恢复方案,并优先考虑可信的企业镜像仓库或自建缓存。