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

本地Docker环境GitLab CI+Kaniko构建镜像:无法访问容器镜像仓库

环境配置

本地服务器通过Docker Compose部署GitLab Omnibus(参考官方文档),GitLab通过Nginx反向代理容器对外提供服务,绑定域名并配置了有效SSL证书。

搭建了容器镜像仓库(CR)用于存储Docker镜像,CR绑定主机特定端口对外可访问,容器内部监听另一端口,通过端口映射关联主机端口,因此CR不经过Nginx代理。docker-compose.yml配置如下:

...
services:
  gitlab:
    ...
    environment:
      VIRTUAL_HOST: 'global.gitlab.domain'
      VIRTUAL_PORT: '80'
      VIRTUAL_NETWORK: 'nginx_proxy_network'
      ...
      GITLAB_OMNIBUS_CONFIG: |
        ...
        registry_external_url 'https://global.gitlab.domain:registry_host_port'
        registry_nginx['listen_port'] = registry_container_port
        ...
    ...
      ports:
        - "registry_host_port:registry_container_port"

该配置原本可正常推送、拉取镜像。

问题出现

配置了CI流水线使用Kaniko构建Docker镜像(参考官方文档),该方案稳定运行一年多,每周更新GitLab和Runner镜像,但近期突然失败,错误信息如下:

$ /kaniko/executor --verbosity=debug --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:latest" --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
DEBU[0000] Copying file /builds/group/repo/Dockerfile to /kaniko/Dockerfile 
error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: checking push permission for "global.gitlab.domain:registry_host_port/group/repo:latest": creating push check transport for global.gitlab.domain:registry_host_port failed: Get "global.gitlab.domain:registry_host_port/v2/": dial tcp 172.22.0.3:registry_host_port: connect: connection refused
ERROR: Job failed: exit code 1

172.22.0.3是gitlab容器的IP。错误显示Kaniko尝试直接访问GitLab容器IP的registry_host_port,但容器内部监听的是registry_container_port,因此连接被拒绝。

背景与疑问

故障发生在从docker-compose v1迁移至docker-compose v2之后,有以下疑问:

  • 为何Kaniko直接访问GitLab容器IP而非通过域名访问CR?
  • 该问题是否与docker-compose v1转v2的迁移有关?
  • Docker本地DNS行为近期是否有变更?
  • 是否有其他用户遇到过此类问题?
额外配置信息

GitLab Runner也是容器部署,与GitLab容器处于同一docker网络(gitlab_intern),其config.toml配置如下:

...
[[runners]]
  name = "docker-01"
  url = "http://gitlab"
  id = 0
  token = "XYZ"
  token_obtained_at = 0001-01-01T00:00:00Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  clone_url = "http://gitlab"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    network_mode = "gitlab_intern"
    shm_size = 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:34:56