如何在CentOS 7系统中通过Shell脚本为Docker添加不安全镜像仓库
解决方案
方案一:带JSON格式校验的Shell脚本(推荐)
此方案不会覆盖你已有的不安全仓库配置,兼容daemon.json存在/不存在的场景:
- 第一步:保存以下内容为
add_insecure_registry.sh
#!/bin/bash # 定义要新增的不安全仓库地址 NEW_REGISTRY="registry-cbu.languoguang.com" # 安装JSON处理工具jq,CentOS7默认无该工具,CI环境一般允许安装轻量依赖 sudo yum install -y jq > /dev/null 2>&1 # 确保Docker配置目录存在 sudo mkdir -p /etc/docker # 若配置文件不存在则初始化基础结构 if [ ! -f /etc/docker/daemon.json ]; then sudo echo '{"insecure-registries": []}' > /etc/docker/daemon.json fi # 新增仓库地址到配置数组,自动去重避免重复添加 sudo jq --arg reg "$NEW_REGISTRY" '.["insecure-registries"] += [$reg] | unique' /etc/docker/daemon.json > temp.json && sudo mv temp.json /etc/docker/daemon.json # 重载配置并重启Docker使修改生效 sudo systemctl daemon-reload sudo systemctl restart docker # 验证配置是否生效 docker info | grep -A 3 "Insecure Registries"
- 第二步:执行脚本
chmod +x add_insecure_registry.sh ./add_insecure_registry.sh
执行完成后输出内容包含registry-cbu.languoguang.com即为配置成功。
方案二:无额外依赖的备用脚本
如果CI环境不允许安装jq等额外工具,可使用以下纯Shell脚本实现:
#!/bin/bash NEW_REGISTRY="registry-cbu.languoguang.com" sudo mkdir -p /etc/docker if [ ! -f /etc/docker/daemon.json ]; then sudo cat > /etc/docker/daemon.json <<EOF { "insecure-registries": ["registry.titan.languoguang.com:5000", "$NEW_REGISTRY"] } EOF else # 检查是否已配置该仓库,避免重复添加 if ! grep -q "$NEW_REGISTRY" /etc/docker/daemon.json; then sudo sed -i "s/\"insecure-registries\": \[/\"insecure-registries\": [\"$NEW_REGISTRY\", /" /etc/docker/daemon.json fi fi sudo systemctl daemon-reload sudo systemctl restart docker docker info | grep -A 3 "Insecure Registries"
注意事项
- 修改Docker不安全仓库配置必须重启Docker daemon才能生效,CI流水线独占Docker环境的场景下重启不会影响其他任务
- 如果你使用的是Docker-in-Docker模式的CI环境,启动DinD容器时直接添加启动参数
--insecure-registry registry-cbu.languoguang.com即可,不需要额外修改配置
内容的提问来源于stack exchange,提问作者Languoguang
相关产品推荐
相关产品推荐

