web-dev-qa-db-ja.com

Gitlabランナードッカーはホストを解決できませんでした

Ubuntu OSでGitlab-ceとgitlab-runnerの2つのコンテナを使用しています

コンテナ名は: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'
9
fliim

Tarun Lalwanリンクのおかげで、Joyce Babuの投稿によると、[runners.docker] sectionのgitlabランナーリポジトリから 文書化されていないオプション があります

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
15
fliim

これが他の人がこれを探している場合に役立ちます。

同じ問題ですが、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を構成します。

編集/etc/docker/daemon.json GitLab Runner(ファイルはまだ存在しませんでした)の内容:

{
    "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について、この問題に関するオンラインの参考文献があまりないことに驚いた。

1
Barry Staes

ご覧のとおり、既にネットワークを定義しています。つまり、gitlabgitlab-runnerの両方が同じネットワーク内にあります。 docker inspectを使用して確認できます。したがって、linksは必要ないので削除する必要があります。

ネットワークエイリアスを設定するには、gitlabサービスのネットワーク部分を次のように変更する必要があります。

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

参照:

0
Mostafa Hussein