如何将我的 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