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

Docker部署下GitLab Runner访问同机GitLab实例克隆仓库的解决方法

解决方案:Docker部署GitLab与Runner的仓库克隆问题

1. 统一容器到自定义Docker网络

默认Docker网络存在隔离性,自定义网络可让容器通过服务名直接通信,避免DNS解析问题:

  • 创建自定义网络:
    docker network create gitlab-internal-net
    
  • 修改GitLab的docker-compose.yml,加入网络配置:
    services:
      gitlab:
        # 原有镜像、端口、挂载等配置保留
        networks:
          - gitlab-internal-net
    networks:
      gitlab-internal-net:
        external: true
    
  • 修改/etc/gitlab-runner/config.toml,在[runners.docker]段添加网络配置:
    [runners.docker]
      # 原有配置保留
      network_mode = "gitlab-internal-net"
    
  • 重启Runner生效:
    gitlab-runner restart
    

2. 配置GitLab内部访问URL

GitLab会以external_url生成克隆地址,必须确保Runner容器能访问该地址:

  • 在GitLab的docker-compose.yml环境变量中设置内部URL:
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://gitlab:80'
            # 其他原有Omnibus配置保留
    
    这里gitlab是GitLab容器的服务名,同一网络内Runner可直接通过该名称访问。
  • 重启GitLab后,进入项目页面确认克隆地址为http://gitlab:80/你的项目路径.git,若不一致,手动修改项目的默认克隆地址。

3. 强制Runner使用内部克隆地址

若GitLab自动生成的克隆地址是外部公网/本地IP,Runner容器可能无法访问:

  • 进入GitLab项目的Settings > CI/CD > Runners,找到关联的Runner,修改其Clone URL为http://gitlab:80(与GitLab内部URL一致)。

4. 验证容器连通性

先排查容器间基础网络是否正常:

  • 进入Runner容器,测试能否ping通GitLab服务名:
    docker exec -it <runner容器名> ping gitlab
    
  • 若ping通但克隆失败,测试HTTP访问:
    docker exec -it <runner容器名> curl http://gitlab:80
    
    若返回GitLab页面,说明网络正常,需排查权限问题:确认项目已开启该Runner的权限,或检查是否需配置SSH密钥(若用SSH克隆)。

5. SSH克隆场景的密钥配置

若项目用SSH地址克隆,需确保Runner容器持有有效密钥:

  • 在config.toml中挂载本地SSH密钥目录到容器:
    [runners.docker]
      volumes = ["/本地密钥目录:/root/.ssh:ro"]
    
  • 本地密钥文件权限设为600,且公钥已添加到GitLab项目的部署密钥中。

内容的提问来源于stack exchange,提问作者M a m a D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:45:03