GitLab runner在运行管道时无法解析主机

问题描述 投票:6回答:1

我有一个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

跑步者列在跑步者列表中:

enter image description here

我可以从gitlab ping 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在gitlab docker容器中运行
  • python-runner docker容器中运行的gitlab runner
  • docker-compose创建一个私有网络gitlab_defaultgitlab是项目的名称),gitlabpython-runner容器都可以通过IP和名称到达其他网络。
  • 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

两个问题:

  1. 运行CI时,如何查看执行程序正在创建的容器?我可以输入它们并在那里进行一些调试吗?
  2. 确保docker executor生成的容器与gitlab容器位于同一网络中的相关参数是什么?

Aaditi

经过一段空闲时间后,我的工作开始了。似乎配置--docker-network-mode确实按预期工作。

docker docker-compose gitlab gitlab-ci-runner
1个回答
2
投票

我有同样的问题,gitlab-runner无法解析主机名。但我们使用在Debian服务器上运行的Gitlab(不是docker安装)和与VPN连接的Google Cloud中的运行程序。

对我来说有用的是将dns地址添加到runners config.toml中,如下所示:

  [runners.docker]
    dns = ["dns-1-ip", "dns-2-ip"]
© www.soinside.com 2019 - 2024. All rights reserved.