Docker容器内GitLab Runner流水线克隆连接失败的解决方法
GitLab Runner流水线Clone步骤连接拒绝问题解决
我通过docker-compose部署了jrcs/letsencrypt-nginx-proxy-companion、jwilder/nginx-proxy、gitlab/gitlab-ce:latest、gitlab/gitlab-runner:latest服务。配置GitLab Runner使用Docker执行器时,Runner可正常注册且处于活跃状态,但触发流水线时,Clone步骤始终提示“connection refused”错误。即使在GitLab Runner容器内手动执行git clone(输入凭证)可克隆仓库,测试公开仓库也存在相同问题。
最终通过调整配置解决问题,以下是生效的配置文件:
生效的Runner配置(config.toml)
[[runners]] name = "docker runner in container" url = "http://gitlab" # 我的容器名称 clone_url = "http://gitlab/" # 克隆时引用容器名称 id = 169 token = "gzD6_X74sbVVMHYHBuzo" token_obtained_at = 2023-06-21T15:06:46Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" network_mode = "git" [runners.cache] MaxUploadedArchiveSize = 0 [runners.docker] tls_verify = false image = "docker:stable" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache", "/certs/client"] network_mode = "git" # 由于Docker上下文,这里必须定义 shm_size = 0
生效的流水线配置(.gitlab-ci.yml)
image: docker:latest variables: DOCKER_HOST: tcp://docker:2376/ DOCKER_TLS_CERTDIR: "/certs" DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client" DOCKER_IMAGE_NAME: "vendor/my-image-name" services: - name: docker:dind entrypoint: ["env", "-u", "DOCKER_HOST"] command: ["dockerd-entrypoint.sh"] alias: docker before_script: - until docker info; do sleep 1; done # 需要等待Docker服务就绪 - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY build: image: docker:stable hooks: pre_get_sources_script: - echo "test" tags: - docker script: - docker pull $DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME - docker build --cache-from "$DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME" -t "$DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME" -f Dockerfile.prod . - docker push "$DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME"
内容的提问来源于stack exchange,提问作者fefe
相关产品推荐
相关产品推荐

