连接 GitLab 和 Gitlab runner,均在 Docker 中

连接 GitLab 和 Gitlab runner,均在 Docker 中

如何将我的 GitLab 安装与在单独的 Docker 容器中运行的运行器连接起来?

GitLab 运行良好,可通过以下方式访问http://docker.lcnet:8181

我的第一个问题是,我在哪里可以找到我的 Gitlab“CI”URL?或者它只是我的普通 URL?我必须包含端口吗?

我正在使用这个文档: https://docs.gitlab.com/ce/ci/docker/using_docker_images.html

这是我得到的:

ubuntu@docker:~$ sudo docker exec -it gitlab-runner gitlab-runner register

Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://docker.lcnet:8181
Please enter the gitlab-ci token for this runner:
<token from settings>
Please enter the gitlab-ci description for this runner:
[5bf3c5086904]: my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
tag1
ERROR: Registering runner... failed runner=hm-eFuar status=couldn't execute POST against http://docker.lcnet:8181/ci/api/v1/runners/register.json:                                                                      Post http://docker.lcnet:8181/ci/api/v1/runners/register.json: dial tcp: lookup vader.nts on 8.8.8.8:53: no such host
PANIC: Failed to register this runner. Perhaps you are having network problems

我发现存在网络问题,但经过几个小时的搜索,我找不到解决这个问题的合适提示。我知道 docker 镜像可以通过 docker-names 相互通信,但没有任何地方提到如何设置它。

我尝试输入“gitlab-ce”(这是运行 gitlab 的 docker 容器的名称)但是不起作用。

我必须创建一个 docker 网络吗?

答案1

好的,在更深入地研究了 docker 之后,我明白我必须使用“link”将 runner-container 链接到 GitLab 容器。

这是上述文档中缺少的内容。虽然文档中说不建议在同一台机器上运行 Gitlab 和运行器(我猜这也可以解决问题),但在某些情况下这是必要的,因此最好提到必须链接容器:

$ docker run -d -P --name gitlabce gitlab/gitlab-ce:latest
$ docker run -d -P --name runner --link gitlabce:gitlabce gitlab/gitlab-runner:latest

$ docker exec -it runner gitlab-runner register
Running in system-mode.                                                                                                                                                                                                                                       

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):                                                                                                                                                                                        
http://gitlabce  

Please enter the gitlab-ci token for this runner:                                                                                                                                                                                                             
(your token from gitlab->admin->runner) 

Please enter the gitlab-ci description for this runner:                                                                                                                                                                                                       
[a11fa3f389d9]:    

Please enter the gitlab-ci tags for this runner (comma separated):                                                                                                                                                                                            

Registering runner... succeeded                

我是 docker 的新手,所以很抱歉问了这个简单的问题,但也许它会对其他人有所帮助。

另一种方法是创建一个用户定义的网络,因为如果我理解正确的话,容器可以在没有链接的情况下相互通信。

答案2

在您的例子中,我将在 Docker 主机上公开 8181。这样,它们就可以在 Docker 主机的外部 IP 上进行通信。此命令应注册 Runner(更新令牌及其中的 IP):

docker exec gitlab-runner gitlab-runner register --non-interactive --name "docker-runner-1" --url "http://docker.lcnet:8181" --registration-token <token> --docker-image="docker:17.03.1-ce" --docker-extra-hosts="docker.lcnet:<the external IP of the host>" --executor=docker --docker-volumes /var/run/docker.sock:/var/run/docker.sock

答案3

就我而言,我必须指向我的网桥 IP 地址,这样它就能起作用了。

我查看了gitlab的网络情况如下:

$docker container inspect $id

然后当我注册时,我从网桥中输入 gitlab IP 地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):                                                                                                                                                                                        
http://$ip

相关内容