Gitlab runner docker 无法解析主机

问题描述 投票:0回答:10

我在 Ubuntu 操作系统上使用 2 个容器:Gitlab-ce 和 gitlab-runner

容器名称为:

gitlab_gitlab_1
gitlab_gitlab-runner_1

我通过

gitlab.localhost.com:801

访问我的 gitlab 应用程序

我使用此命令成功注册了跑步者:

docker exec -it gitlab_gitlab-runner_1 gitlab-runner register --non-interactive --url http://gitlab_gitlab_1 --registration-token _wgMgEx3nBocYQtoi83c --executor docker --docker-image alpine:latest

然后,当我开始工作时,我收到以下错误消息:

Running with gitlab-runner 10.7.1 (b9bba623)
  on 589a617ee407 12ba77f7
Using Docker executor with image alpine:latest ...
Pulling docker image alpine:latest ...
Using docker image sha256:3fd9065eaf02feaf94d68376da52541925650b81698c53c6824d92ff63f98353 for alpine:latest ...
Running on runner-12ba77f7-project-1-concurrent-0 via 01196621a827...
Cloning repository...
Cloning into '/builds/root/test'...
fatal: unable to access 'http://gitlab-ci-token:[email protected]/root/test.git/': Could not resolve host: gitlab.localhost.com
ERROR: Job failed: exit code 1

在这两个容器中,我都可以访问主机名

gitlab.localhost.com
。 我认为问题来自于 alpine 图像,它无法解析主机。

我该如何解决这个问题?

谢谢

编辑1

docker-compose.yml

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.localhost.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.localhost.com'
    ports:
      - '801:80'
      - '443:443'
      - '22:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    networks:
      - 'default'

  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    depends_on:
      - 'gitlab'
    restart: always
    volumes:
      - '/srv/gitlab-runner/config:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'
    networks:
      - 'default'
    links:
      - 'gitlab:gitlab.localhost.com'

networks:
  default:
    driver: 'bridge'

编辑2

docker-compose.yml

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.localhost.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.localhost.com'
    ports:
      - '801:80'
      - '443:443'
      - '22:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    networks:
      default:
        aliases:
          - 'gitlab.localhost.com'

  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    depends_on:
      - 'gitlab'
    restart: always
    volumes:
      - '/srv/gitlab-runner/config:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'
    networks:
      - 'default'

networks:
  default:
    driver: 'bridge'
docker gitlab-ci gitlab-ci-runner
10个回答
41
投票

感谢 Tarun Lalwan 链接并根据 Joyce Babu 帖子,在 gitlab runner 存储库中有一个 未记录的选项

[runners.docker] section

network_mode : Add container to a custom network

所以我必须在

config.toml
中使用我的网络名称设置此选项

[[runners]]
  ...
  [runners.docker]
    ...
    network_mode = "gitlab_default"

或者从命令行创建跑步者时

docker exec -it gitlab_gitlab-runner_1 gitlab-runner register \
--non-interactive \
--url http://gitlab_gitlab_1 \
--registration-token _wgMgEx3nBocYQtoi83c \
--executor docker \
--docker-image alpine:latest \
--docker-network-mode gitlab_default

27
投票

我知道这个线程很旧,但我看到到处都有指向这个线程的线程, 但没有解决我的问题。

我收到了同样的错误消息:

致命:无法访问“http://gitlab.maison.fr:82/angular/test1.git/”:无法解析主机:gitlab.maison.fr

network_mode = "host" 添加到 config.toml 解决问题。

我的 config.toml 下面位于我的本地专用网络上:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "mars"
  url = "http://gitlab.maison.fr:82/"
  token = "TCfHAheTUdWMU2-fFNxK"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "gitlab/gitlab-runner:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mode = "host"

6
投票

这对我来说没有在 docker compose 中定义网络的情况下工作。只需在 gitlab-runner 配置中添加一条 extra_hosts 记录,就像我们在其他操作系统中添加 A 记录一样。

sudo vim /etc/gitlab-runner/config.toml

  [runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
extra_hosts = ["xxx.xxx.com.cn:192.168.10.110"]

https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section


2
投票

如果这可以帮助其他人寻找这个..

同样的问题,但 GitLab 和 GitLab Runner 在 LAN 中的不同机器上运行。 DNS 正在工作并且

ping gitlab
工作,除了在 docker 内部:

重现问题:

$ sudo docker run -it alpine ping gitlab
ping: bad address 'gitlab'
^C

但可以与给定的 DNS 配合使用:

$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.536 ms
^C

为docker配置实际的LAN DNS。

在 GitLab Runner 上编辑

/etc/docker/daemon.json
(文件尚不存在),内容为:

{
    "dns": ["172.168.0.1", "1.1.1.1"]
}

再次测试,现在OK了:

$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.455 ms
64 bytes from 172.168.0.5: seq=1 ttl=63 time=0.905 ms
^C

如果这不是应该做的,我很高兴听到。
如果这个问题一开始就不应该存在,我也很高兴听到。我很惊讶在网上没有找到太多关于 GitLab Runner 这个问题的参考..


0
投票

正如我所看到的,您已经定义了一个网络,这意味着

gitlab
gitlab-runner
都在同一个网络中。您可以使用
docker inspect
来验证这一点。所以你需要删除
links
,因为你不需要它。

为了设置网络别名,您需要将

gitlab
服务的网络部分更改为以下内容:

gitlab:
  ...
  networks:
    default:
      aliases:
        - gitlab.localhost.com

参考资料:


0
投票

我这几天遇到了这个问题,在尝试了各个线程的所有建议解决方案后,我通过以下方式解决了它:

pkill docker
iptables -t nat -F
ifconfig docker0 down
service docker restart

感谢我的docker容器没有互联网


0
投票

从网络角度来看,容器就像一个单独的服务器,拥有自己的 IP 地址、网络路由和 DNS 解析。唯一的例外是在主机网络上运行容器。

也就是说,您可能需要弄清楚主机的 DNS 解析是如何工作的(也许您在 /etc/hosts 中添加了一些内容?),然后在容器内执行相同的操作。

或者使用异常并在主机网络上运行。


0
投票

对于任何尝试在具有自己的 dns 设置(即拥有自己的 dns 服务器)的专用网络中使用 docker 执行器部署运行程序的人,我尝试了上述解决方案在

config.toml
中指定 docker 网络,但它不起作用。尽管我可以从主机和运行器容器解析 gitlab.com,但我仍然收到上述错误。因此作业容器无法解析 gitlab.com。最后对我有用的是:

[[runners]]
  ...
  [runners.docker]
    ...
    network_mode = "host"

0
投票

我遇到了同样的问题,在我的问题中,服务器代理已打开,只需将其禁用即可。 #systemctl 状态防火墙 #systemctl 停止防火墙


0
投票

我通过将

network_mode = "host"
添加到
config.toml
来解决这个问题,它会选择
/etc/resolve.conf

中给出的网络配置
© www.soinside.com 2019 - 2024. All rights reserved.