You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将私有Docker镜像推送至私网本地GitLab服务器容器注册表

私网部署GitLab推送本地自定义镜像操作指引

前置检查

先在机器2(10.2.3.100)上确认两个基础条件:

  • 私网连通性正常:执行ping 10.2.3.105无丢包,GitLab服务的Web端口、容器注册表端口可以正常访问
  • GitLab侧已经完成容器注册表开启配置,提前在GitLab创建好用于存储镜像的目标项目,记录下项目的完整路径(项目主页URL中IP后跟随的路径,例如devops/basic-images)

步骤1:配置Docker放行私有注册表(机器2操作)

纯私网IP部署的GitLab默认没有可信SSL证书,Docker默认会拦截非HTTPS可信仓库的推送请求,需要先修改Docker配置:

  1. 编辑Docker守护进程配置文件
vi /etc/docker/daemon.json
  1. 写入如下配置,将地址替换为你实际的GitLab容器注册表地址,如果注册表和GitLab主站共用443端口就直接写IP,若自定义了其他端口(常见为5005、5050)则带上端口:
{
  "insecure-registries": ["10.2.3.105:<替换为实际的注册表端口,无自定义端口则直接写10.2.3.105>"]
}
  1. 重载配置并重启Docker生效
systemctl daemon-reload
systemctl restart docker

步骤2:登录GitLab容器注册表(机器2操作)

执行登录命令,地址和上一步配置的insecure-registries地址保持完全一致:

docker login 10.2.3.105:<注册表端口>

认证信息说明:用户名填GitLab个人账号即可;如果账号开启了双因素认证,密码需要使用勾选了read_registry、write_registry权限的个人访问令牌,未开启双因素认证直接填GitLab登录密码即可。

步骤3:给本地镜像打符合注册表规则的标签

你已经在机器2上构建好的ansible:2.9.27镜像,需要重新打标签匹配GitLab注册表的路径规则,标签格式为:
<注册表地址>/<GitLab目标项目全路径>/<镜像名>:<版本号>
举个实际例子,如果你存储镜像的GitLab项目路径是devops/basic-images,注册表用默认443端口,打标签命令为:

docker tag ansible:2.9.27 10.2.3.105/devops/basic-images/ansible:2.9.27

注意:项目路径必须和GitLab上的实际路径完全一致,路径写错会直接导致推送时报权限错误。

步骤4:推送镜像到GitLab容器注册表

标签打完直接执行推送命令即可:

docker push 10.2.3.105/devops/basic-images/ansible:2.9.27

等待镜像分层推送完成无报错,即推送成功,可以直接到GitLab对应项目的「容器注册表」菜单下查看已上传的镜像。


常见报错排查

  • 报连接超时:用telnet 10.2.3.105 <注册表端口>检查端口连通性,排查GitLab服务器的防火墙、iptables规则是否放通对应端口
  • 报HTTPS证书相关错误:检查daemon.json中配置的insecure-registries地址,和登录、打标签用的注册表地址是否完全一致,修改配置后必须重启Docker才能生效
  • 报权限拒绝:先确认登录使用的账号/令牌对目标项目有写入权限,再检查镜像标签里的项目路径是否正确,个人访问令牌是否勾选了write_registry权限

内容的提问来源于stack exchange,提问作者TRONG NGUYEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:48:45