如何根据环境配置Docker Registry 实现开发与生产环境镜像拉取适配
原生Docker实现不同环境拉取不同Registry镜像的方案
有两种Docker原生方案可以实现需求,不需要维护多份Dockerfile也不需要额外脚本替换:
方案一:使用Docker Registry重写规则(推荐,无需修改Dockerfile)
这是对代码侵入性最低的方案,仅需要修改本地Docker daemon的配置即可全局生效:
- 打开本地Docker daemon配置文件:Linux默认路径为
/etc/docker/daemon.json,Windows/Mac可以在Docker Desktop的设置界面找到「Docker Engine」配置项 - 添加重写规则,配置示例如下:
{ "registry-mirrors": ["https://corporate.proxy"], "rewrite": { "(.*)": "corporate.proxy/$1" }, "features": { "containerd-snapshotter": true } }
- 重启Docker daemon后生效,之后本地所有
docker pull、docker build操作中未显式指定Registry的镜像,都会自动转发到企业私有Registry拉取。CI/CD环境无此配置时,默认就会从DockerHub拉取镜像,完全不需要修改Dockerfile内容。
注意:该功能需要Docker 20.10及以上版本支持
方案二:使用Dockerfile ARG参数实现动态切换
如果不想修改全局Docker配置,也可以在Dockerfile中声明构建参数,通过构建时传参切换镜像源:
- 调整Dockerfile内容如下:
# 声明镜像前缀参数,默认值为空 ARG REGISTRY_PREFIX='' FROM ${REGISTRY_PREFIX}node:16 # 后续构建逻辑保持不变
- 本地开发构建时,传入私有Registry前缀即可:
docker build --build-arg REGISTRY_PREFIX=corporate.proxy/ . - CI/CD环境构建时不需要传入额外参数,默认就会从DockerHub拉取
node:16镜像。
内容的提问来源于stack exchange,提问作者Aquarthur
相关产品推荐
相关产品推荐

