我安装了一个dockerized GitLab和GitLab Runner,其中包含以下docker-compose.yml
:
version: "3"
services:
gitlab:
image: gitlab/gitlab-ee:latest
container_name: gitlab
restart: always
hostname: gitlab
ports:
- "45022:22"
- "45080:80"
- "45443:443"
volumes:
- /srv/gitlab/config:/etc/gitlab
- /srv/gitlab/logs:/var/log/gitlab
- /srv/gitlab/data:/var/opt/gitlab
python-runner:
image: gitlab/gitlab-runner:latest
container_name: python-runner
hostname: python-runner
volumes:
- /srv/python-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
environment:
- CI_SERVER_URL=http://gitlab/ci
- RUNNER_TOKEN=myTokenCode
- RUNNER_DESCRIPTION=Python 2.7.14
- RUNNER_EXECUTOR=docker
- DOCKER_IMAGE=python:2.7.14
restart: always
我已经注册了跑步者:
docker exec -it python-runner gitlab-runner register \
--non-interactive \
--url "http://gitlab/" \
--registration-token "${GITLAB_REGISTRATION_TOKEN}" \
--description "Python 2.7.14" \
--executor "docker" \
--docker-image python:2.7.14
跑步者列在跑步者名单中:
我可以通过gitlab
:
python-runner
主机
» docker exec -it python-runner bash
root@python-runner:/# ping gitlab
PING gitlab (172.20.0.2) 56(84) bytes of data.
64 bytes from gitlab.gitlab_default (172.20.0.2): icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from gitlab.gitlab_default (172.20.0.2): icmp_seq=2 ttl=64 time=0.055 ms
^C
--- gitlab ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.055/0.083/0.112/0.029 ms
但是在运行管道时,它失败了:
`fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab/group/project.git/': Could not resolve host: gitlab
这怎么可能?怎么解决这个问题?
我正在创建的架构如下:
gitlab
docker container python-runner
docker container gitlab_default
(gitlab
是项目的名称),gitlab
和python-runner
容器都可以通过其他方式访问它知识产权和名称。python-runner
使用docker
执行程序在CI期间(在主机?中)根据定义的python:2.7.14
生成容器。我不知道gitlab如何命名这些容器,让我们称之为ci-job
ci-job
将项目克隆到此git clone
容器中。这会失败,因为ci-job
容器无法访问gitlab
容器,因为它可能位于不同的网络(default
网络中?)我试图强制python-runner
在同一个gitlab_default
网络中生成容器,方法是使用--docker-network-mode gitlab_default
标记,如下所示:
docker exec -it python-runner gitlab-runner register \
--non-interactive \
--tag-list python-2.7.14 \
--url "http://gitlab" \
--registration-token "$(GITLAB_REGISTRATION_TOKEN)" \
--name "Python 2.7.14" \
--executor "docker" \
--docker-image python:2.7.14 \
--docker-network-mode gitlab_default
但它仍然无效。我不确定这是否是正确的标志,因为它是poorly documented。
两个问题:
gitlab
容器位于同一网络中的相关参数是什么?经过一段空闲时间后,我的工作开始了。似乎配置--docker-network-mode
确实按预期工作。
答案 0 :(得分:2)
我在gitlab-runner中也遇到同样的问题,无法解析主机名。但是我们使用在Debian服务器(不是docker安装)上运行的Gitlab,以及通过VPN连接的Google Cloud中的运行程序。
对我有用的是将dns地址添加到跑步者config.toml,如下所示:
[runners.docker]
dns = ["dns-1-ip", "dns-2-ip"]
答案 1 :(得分:0)
我遇到了相同的问题(基于docker-compose的设置,Web和Runner都在同一网络中运行,但是执行器-CI Jobs-不在)。如
中所述https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section
您可以指定执行程序容器将在其中运行的docker网络:
[runners.docker]
network_mode = "the_network_docker-compose_created_for_this_project"
这样,我的执行者可以从http://web/
进行克隆,其中web
是运行gitlab web-ui的服务的名称。