如何从GitLab CI作业容器推送Docker镜像至本地Registry?
解决GitLab CI DinD推送镜像到本地HTTP Registry的问题
问题原因
Docker客户端默认强制要求Registry使用HTTPS协议,但你的本地Registry是HTTP服务,所以作业容器里的Docker客户端连接时会报错拒绝请求。
解决方案
1. 配置DinD服务允许HTTP访问目标Registry
在你的.gitlab-ci.yml里,给DinD服务添加--insecure-registry参数,指定本地Registry的IP和端口:
services: - name: docker:dind command: ["--insecure-registry", "some_ip_address:5000"]
这个参数会告诉DinD的Docker daemon,允许以HTTP方式访问指定的Registry地址。
2. 确认作业容器能访问主机Registry
- 确保主机的5000端口已对外开放(比如调整防火墙规则允许外部访问)
- 确认本地Registry容器的端口映射正确,启动命令类似:
docker run -d -p 5000:5000 registry:latest
3. 执行推送命令
配置完成后,在CI作业里直接执行推送命令即可:
docker push some_ip_address:5000/my-ubuntu
额外说明
如果你的GitLab Runner是运行在主机的Docker容器内,可以在启动Runner时添加--network host参数,让Runner直接使用主机网络,这样作业容器就能直接通过localhost:5000访问Registry,无需使用主机IP。
内容的提问来源于stack exchange,提问作者andrestoga
相关产品推荐
相关产品推荐

