web-dev-qa-db-fra.com

Docker runner Gitlab Impossible de résoudre l'hôte

J'utilise 2 conteneurs sur mon système d'exploitation Ubuntu: Gitlab-ce et gitlab-runner

Les noms des conteneurs sont: gitlab_gitlab_1 et gitlab_gitlab-runner_1

J'accède à mon application gitlab via gitlab.localhost.com:801

J'inscris avec succès un coureur avec cette commande:

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

Puis, quand je commence le travail, j'ai reçu ce message d'erreur:

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

Dans les deux conteneurs, je peux accéder au nom d'hôte gitlab.localhost.com. Je pense que le problème vient de l'image Alpine qui ne peut pas résoudre l'hôte.

Comment puis-je résoudre ce problème?

Merci

Modifier 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'

Modifier 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'
7
fliim

Grâce au lien de Tarun Lalwan et à la publication de Joyce Babu, il existe une option non documentée depuis le dépôt de coureur de gitlab dans le fichier. [runners.docker] section

network_mode : Add container to a custom network

Je dois donc définir cette option avec le nom de mon réseau dans le config.toml comme

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

OU quand créer le coureur à partir de la ligne de commande

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

Si cela aide les autres à la recherche de cela ..

Même problème, mais GitLab et GitLab Runner s’exécutent sur des machines différentes du réseau local. DNS fonctionne et ping gitlab fonctionne, sauf à l'intérieur des dockers:

Reproduire le problème:

$ Sudo docker run -it Alpine ping gitlab
ping: bad address 'gitlab'
^C

Mais fonctionne avec le DNS donné:

$ 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

Config DNS actuel du réseau pour le menu fixe.

Editez /etc/docker/daemon.json sur GitLab Runner (le fichier n’existait pas encore) avec le contenu suivant:

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

Testez à nouveau, maintenant 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

Si ce n'est pas comme cela est censé être fait, je serais heureux de l'entendre.
Si ce problème ne devait pas exister, je serais heureux de l'entendre aussi. J'ai été surpris de ne pas trouver beaucoup de références en ligne à ce problème pour GitLab Runner ..

0
Barry Staes

Comme je peux le constater, vous avez déjà défini un réseau, ce qui signifie que gitlab et gitlab-runner sont tous deux dans le même réseau. vous pouvez le vérifier en utilisant docker inspect. vous devez donc supprimer links car vous n'en avez pas besoin.

Afin de définir un alias de réseau, vous devez modifier le composant réseau du service gitlab comme suit:

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

Références:

0
Mostafa Hussein