如何配置Docker默认推送镜像至本地托管Registry?
如何让Docker默认推送镜像到本地Nexus托管仓库?
明确说明:Docker本身没有官方全局配置直接指定默认推送仓库,但可以通过以下几种实操方式实现需求,让开发者无需手动输入本地Registry地址:
1. 配置Shell别名,自动添加Registry前缀
这是最直接的落地方式,让开发者构建镜像时自动带上托管仓库地址:
- 让开发者在个人Shell配置文件(
~/.bashrc或~/.zshrc)中添加别名:
之后构建镜像只需执行alias docker-build='docker build -t nexus-hosted.example.com:8081/$1:latest .'docker-build my-app,就会自动生成带托管仓库前缀的镜像标签,推送时直接敲docker push my-app即可(标签已包含Registry地址)。 - 同时可预先配置托管仓库的认证信息,避免每次推送输密码:
执行docker login nexus-hosted.example.com:8081,认证信息会自动写入~/.docker/config.json,文件结构类似:{ "auths": { "nexus-hosted.example.com:8081": {} } }
2. 配置Docker Daemon信任本地Registry
如果你的Nexus是HTTP协议或使用自签HTTPS证书,必须先让Docker信任该Registry,否则推送会报错:
- 修改
/etc/docker/daemon.json(Linux系统):
其中{ "insecure-registries": ["nexus-hosted.example.com:8081"], "registry-mirrors": ["nexus-proxy.example.com:8081"] }registry-mirrors对应你用于拉取镜像的代理仓库,insecure-registries解决HTTP Registry的信任问题。 - 重启Docker生效:
sudo systemctl restart docker
如果是HTTPS自签证书,将证书文件放到/etc/docker/certs.d/nexus-hosted.example.com:8081/目录下,再重启Docker即可。
3. Nexus路由规则兜底(可选)
如果担心部分开发者忘记添加前缀,可在Nexus托管仓库中配置路由规则:
- 在Nexus托管仓库的设置页面添加路由,匹配所有镜像推送请求,将原本要推送到Docker Hub的请求重定向到本地仓库。不过该方案仍需开发者推送时指定Nexus地址,更多作为补漏手段。
内容的提问来源于stack exchange,提问作者Amir Pashazadeh
相关产品推荐
相关产品推荐

