【Docker】使用 jq 管理镜像源
国内访问 Docker Hub 速度较慢,通过配置国内镜像加速器,可显著加快拉取镜像速度。使用 jq
操作 /etc/docker/daemon.json
的 registry-mirrors
字段,可避免手动编辑带来的格式错误,并在添加、替换、删除等场景下保持高效与安全。
一、准备工作
-
安装
jq
# Debian/Ubuntu sudo apt update && sudo apt install -y jq # CentOS/RHEL/Fedora sudo yum install -y jq # 或 sudo dnf install -y jq
-
确保有
sudo
权限
二、统一前置:备份并初始化配置
# 备份(文件不存在时忽略)
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak.$(date +%Y%m%d%H%M%S) 2>/dev/null || true
# 初始化:文件不存在则创建空 JSON
[ -f /etc/docker/daemon.json ] || echo '{}' | sudo tee /etc/docker/daemon.json >/dev/null
⚠️ 建议每次操作前先执行此脚本,以确保可回滚并保证
daemon.json
文件始终为合法 JSON。
三、操作示例
以下示例均在初始化脚本执行完成后使用。
1. 完全替换 / 设置镜像源列表(推荐)
覆盖现有 registry-mirrors
,适用于一次性设定多个加速器。
# 定义镜像源列表
MIRRORS='["https://docker.xuanyuan.me","https://dockers.xuanyuan.me","https://docker.1ms.run","https://dislabaiot.xyz","https://docker.sunzishaokao.com","https://hub.rat.dev","https://doublezonline.cloud","https://xdark.top","https://dockerpull.cn","https://docker.tbedu.top","https://mirror.gcr.io","https://dockerproxy.com","https://docker.nju.edu.cn","https://mirror.iscas.ac.cn","https://elastic.m.daocloud.io","https://docker.m.daocloud.io"
]'
# 使用 jq 写入并原子替换
sudo jq --argjson m "$MIRRORS" '."registry-mirrors" = $m' /etc/docker/daemon.json \| sudo tee /etc/docker/daemon.json.tmp >/dev/null \&& sudo mv /etc/docker/daemon.json.tmp /etc/docker/daemon.json
2. 追加单个镜像源
仅在原有列表末尾添加,不会重复创建。
NEW="https://registry.docker-cn.com"
sudo jq --arg nm "$NEW" '."registry-mirrors" = (."registry-mirrors"? // [] | . + [$nm])' /etc/docker/daemon.json \| sudo tee /etc/docker/daemon.json.tmp >/dev/null \&& sudo mv /etc/docker/daemon.json.tmp /etc/docker/daemon.json
3. 删除所有镜像源(恢复默认)
sudo jq 'del(."registry-mirrors"?)' /etc/docker/daemon.json \| sudo tee /etc/docker/daemon.json.tmp >/dev/null \&& sudo mv /etc/docker/daemon.json.tmp /etc/docker/daemon.json
四、重启与验证
-
重启 Docker
sudo systemctl daemon-reload sudo systemctl restart docker
-
验证配置
docker info # 应显示存在刚才设置的地址
五、注意事项
- 每次修改后必须重启 Docker 服务,否则配置不生效。
jq
操作保证 JSON 格式安全,不会因手动编辑引入语法错误。- 镜像源不宜过多,推荐 2–3 个稳定高速的加速器。
- 若配置不生效:
- 检查
/etc/docker/daemon.json
是否为有效 JSON:jq . /etc/docker/daemon.json
- 查看 Docker 日志:
sudo journalctl -u docker.service
- 检查