【问题标题】:Gitlab runner docker Could not resolve hostGitlab runner docker无法解析主机
【发布时间】:2018-10-23 20:31:01
【问题描述】:

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

容器名称为:gitlab_gitlab_1gitlab_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:xxxxxxxxxxxxxxxxxxxx@gitlab.localhost.com/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 网络,以便将它们链接在一起?
  • 是的,我还使用默认网桥驱动程序创建了一个用户定义的网络。所以他们在同一个网络中。
  • 在这种情况下,您可以使用服务名称在 docker 中访问它,我假设它是“gitlab”,您可以像这样访问它:gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab/root/test.git,或者您可以为它定义一个网络别名或者也使用这个 gitlab_gitlab_1
  • 我如何指定这个?我已经使用容器名称gitlab_gitlab_1注册了跑步者,没有用。

标签: docker gitlab-ci gitlab-ci-runner


【解决方案1】:

在网络方面,容器就像一个独立的服务器,拥有自己的 IP 地址、网络路由和 DNS 解析。唯一的例外是在宿主网络上运行容器。

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

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

【讨论】:

    【解决方案2】:

    这对我有用,无需在 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

    【讨论】:

      【解决方案3】:

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

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

      感谢My docker container has no internet

      【讨论】:

        【解决方案4】:

        感谢 Tarun Lalwan 链接,根据 Joyce Babu 的帖子,在 [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
        

        【讨论】:

        • 非常感谢您!我试图解决这个问题 2 小时...
        • 谢谢!我还想补充一点,“gitlab_default”特定于@fliim 的 docker-compose.yml。请记住,网络名称是服务名称加上 docker-compose.yml 中给出的名称。例如,我的是“基础设施”,网络是“后端”,所以 network_mode 行是network_mode = "infrastructure_backend"
        • 谢谢。您可以使用docker network ls 列出您的网络
        【解决方案5】:

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

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

        致命:无法访问“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】:

          如果这有助于其他人寻找这个..

          同样的问题,但 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"]
          }
          

          再次测试,现在可以了:

          $ 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 的这个问题的参考资料。

          【讨论】:

            【解决方案7】:

            正如我所见,您已经定义了一个网络,这意味着 gitlabgitlab-runner 都在同一个网络中。您可以使用docker inspect 进行验证。所以你需要删除links,因为你不需要它。

            要设置网络别名,您需要将gitlab 服务的网络部分更改为以下内容:

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

            参考资料:

            【讨论】:

            • 我按照你的建议更新了我的 docker-compose.yml 文件,运行 docker-compose downdocker-compose up -d。没有改变。提醒一下, gitlab-runner 容器可以访问 gitlab.localhost.com 但不能访问作业。我认为它在 alpine:latest 容器内,由无法访问此主机名的跑步者运行
            • 你可以验证gitlab容器有别名。您还可以登录 gitlab-runner 容器并尝试在通过 docker inspect 找到的每个 gitlab 的别名上运行 ping 或 wget 或 curl。
            • 别名在 gitlab-runner 容器内工作,正如我所说。但不是从 gitlab 运行的工作。
            • 你发布的错误看起来像是一个普通的 git clone $URL,你能在运行容器中手动做同样的事情吗?
            • git clone http://gitlab.localhost.com/root/test.git 在运行器容器中工作
            猜你喜欢
            • 2020-01-30
            • 1970-01-01
            • 2016-12-30
            • 1970-01-01
            • 1970-01-01
            • 2019-09-03
            • 2019-12-24
            • 2018-04-21
            • 1970-01-01
            相关资源
            最近更新 更多