在本地运行 GitLab 和 GitLab-Runner docker 实例时,管道中的构建步骤因连接被拒绝错误而失败
Posted
技术标签:
【中文标题】在本地运行 GitLab 和 GitLab-Runner docker 实例时,管道中的构建步骤因连接被拒绝错误而失败【英文标题】:Build step in pipeline is failing with connection refused error while running GitLab and GitLab-Runner docker instances locally 【发布时间】:2020-12-25 05:54:55 【问题描述】:我在本地运行 GitLab 和 Gitlab-Runner docker 实例。执行 Spring Boot 和 Maven 项目管道时,出现以下错误。
Getting source from Git repository
00:02
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /builds/root/starter-springboot-pipeline/.git/
fatal: unable to access 'http://localhost/root/starter-springboot-pipeline.git/': Failed to connect to localhost port 80: Connection refused
Uploading artifacts for failed job
00:07
ERROR: Job failed: exit code 1
不确定上述错误中的 localhost 是指 GitLab 容器还是 Runner 容器。它应该引用 gitlab 容器而不是 localhost 吗?
以下是我使用的命令和配置。
启动 GitLab 服务器:
docker run -itd --network=gitlab-network --hostname localhost \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab --restart always --volume config:/etc/gitlab \
--volume logs:/var/log/gitlab \
--volume data:/var/opt/gitlab \
gitlab/gitlab-ee:12.10.14-ee.0
启动 GitLab Runner
docker run -d --name gitlab-runner --restart always \
-v ~/gitlab/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:v12.10.3
创建了网络“gitlab-network”并将两个容器都添加到其中。
docker network connect gitlab-network gitlab
docker network connect gitlab-network gitlab-runner
按照以下方式注册跑步者:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab
Please enter the gitlab-ci token for this runner:
XxXXxXXXxxXXXXXX
Please enter the gitlab-ci description for this runner:
[49ad685039ad]: runner14
Please enter the gitlab-ci tags for this runner (comma separated):
docker
Registering runner... succeeded runner=EkWnb63h
Please enter the executor: docker-ssh, parallels, shell, virtualbox, docker+machine, kubernetes, custom, docker, ssh, docker-ssh+machine:
docker
Please enter the default Docker image (e.g. ruby:2.6):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
下面是 gitlab-ci.yml
image: maven:3.3-jdk-8
stages:
- test
test_job:
stage: test
script:
- pwd
- mvn clean
- mvn compile
- mvn test
tags:
- docker
我刚刚开始研究 GitLab 和 docker,在通过大量研究解决了一些问题后,我能够设置它们并运行管道。但我被这个问题困住了。
【问题讨论】:
【参考方案1】:主机名localhost
总是被解析为127.0.0.1
或::1
- 换句话说就是环回接口,顾名思义就是环回并连接到iteslf。
这意味着你的跑步者正试图在自己的容器中找到http://localhost/root/starter-springboot-pipeline.git/
- 这显然失败了,因为它在 GitLab 的容器中。
这也是为什么在您的跑步者配置中,您必须将 GitLab 的地址指定为 http://gitlab
而不是 http://localhost
您可以尝试使用命令启动 GitLab 容器(预先重新创建命名卷以确保它是从头开始配置的)
docker run -itd --network=gitlab-network --hostname gitlab \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab --restart always \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab/'" \
--volume config:/etc/gitlab \
--volume logs:/var/log/gitlab \
--volume data:/var/opt/gitlab \
gitlab/gitlab-ee:12.10.14-ee.0
但我不能保证它会起作用,因为 GitLab 旨在运行在具有自己唯一主机名的服务器上。
编辑:
您也可以尝试编辑config.toml
并将[runners.docker]
部分中的network_mode
设置为gitlab-network
。请参阅here 了解更多信息。
【讨论】:
感谢您对我的问题的快速回复。我尝试了您给出的命令。它按预期替换了主机名,但是我收到错误“无法访问'gitlab/root/starter-springboot-pipeline.git':无法解析主机:gitlab”。我已经尝试 ssh 到两个容器并运行 curl 命令“curl -L gitlab/root/starter-springboot-pipeline.git”,都给出了非错误响应。 我不是 100% 确定,但我认为 GitLab 运行器正在使用此图像创建一个姊妹容器:hub.docker.com/r/gitlab/gitlab-runner-helper 进行实际克隆,并且该姊妹容器未连接到gitlab-network
,所以它无法解析主机名。
成功了。非常感谢。我面临另一个问题,我正在研究。如果需要,我会提出另一个问题。以上是关于在本地运行 GitLab 和 GitLab-Runner docker 实例时,管道中的构建步骤因连接被拒绝错误而失败的主要内容,如果未能解决你的问题,请参考以下文章