唯一生效方式是配置/etc/docker/daemon.json,需手动创建合法json格式文件,含"registry-mirrors"数组(地址必须为完整https、无尾斜杠),保存后执行sudo systemctl restart docker并用docker info验证。

Linux下配置/etc/docker/daemon.json的正确写法
直接编辑/etc/docker/daemon.json是唯一生效方式,其他路径或临时环境变量都不起作用。这个文件必须是合法 JSON,且只允许存在一个registry-mirrors字段。
- 先确保目录存在:
sudo mkdir -p /etc/docker - 用
sudo nano /etc/docker/daemon.json新建并写入(注意末尾不能有多余逗号):
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
- 所有镜像源地址必须以
https://开头,不能带斜杠结尾(如https://docker.1ms.run/会失效) - 不要加注释——JSON 不支持
//或/* */,否则dockerd启动失败
配置后必须重启dockerd服务才能生效
改完daemon.json不重启,等于没配。Docker 守护进程不会热加载该文件。
- 重载配置并重启:
sudo systemctl daemon-reload && sudo systemctl restart docker - 检查是否运行:
sudo systemctl is-active docker应返回active - 如果报错,看日志:
sudo journalctl -u docker --since "1 hour ago" | grep -i error
常见失败原因:JSON 格式错误、镜像源地址无法解析(DNS 或防火墙拦截)、SELinux 拒绝读取/etc/docker/daemon.json(CentOS/Rocky 环境需额外处理)。
验证registry-mirrors是否真正生效
别只信docker info输出里有地址,要确认拉取时实际走的是镜像源。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 查配置是否被读取:
docker info | grep "Registry Mirrors"—— 输出应含你配的地址 - 强制触发一次拉取并观察网络路径:
docker pull --no-cache hello-world - 抓包确认(可选):
sudo tcpdump -i any host docker.1ms.run -c 5 -A 2>/dev/null | grep -i 'manifest',能看到请求发往你配的源才真生效
注意:docker info显示地址 ≠ 实际走该地址。有些镜像源响应 404 或 403 时,Docker 会自动 fallback 到默认 registry,但docker info仍显示原配置。
为什么配多个源反而更慢?顺序和超时很关键
Docker 是严格按registry-mirrors数组顺序尝试的,第一个源响应慢或卡住,就会拖累全部拉取。
- 实测中,
https://docker.1ms.run平均响应时间 -
https://docker.xuanyuan.me在华东地区稳定,但华北偶尔延迟高,建议放第二位 - 避免塞超过 3 个源——第四个源即使可用,也可能因前三个超时等待而永远轮不到
- 不推荐混用已停服的老源(如中科大
ustc.edu.cn、网易163.com),它们目前多数返回 404 或连接拒绝,徒增等待
真正容易被忽略的点是:镜像源只加速docker.io下的镜像(比如nginx、redis:7.0),对ghcr.io、quay.io、私有仓库完全无效——这时候再怎么调registry-mirrors也没用。










