Gitlab CI-Fehler beheben: error during connect: Post http://docker:2375/v1.40/auth: dial tcp: lookup docker on ... no such host
Problem:
In Ihren GitLab CI-Jobs sehen Sie diese Fehlermeldung beim Versuch, einen docker-Befehl auszuführen:
Lösung
Dieser Fehler tritt bei Docker-basierten GitLab-Runnern auf, die mit einem docker-Executor konfiguriert sind. Die Fehlermeldung bedeutet, dass der innere Docker-Container keine Verbindung zum Host-docker-Daemon hat.
Um dies zu beheben, setzen Sie diese Optionen unter [runners.docker] in Ihrer gitlab-runner config.toml:
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]Eine gültige config.toml sieht so aus:
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "CoreOS-Haar-Runner"
url = "https://gitlab.techoverflow.net/"
token = "bemaiBie8usahMoo9ish"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
shm_size = 0Warum das funktioniert
Das Hinzufügen von "/var/run/docker.sock:/var/run/docker.sock" ermöglicht es dem inneren Docker-Container, der innerhalb des gitlab-runner läuft, auf den äußeren (Host-)Docker-Daemon zuzugreifen. Ohne dies versucht er, sich mit der Docker-Standard-URL zu verbinden, d.h. http://docker:2375. Diese URL kann nicht über DNS aufgelöst werden (der DNS-Server in meinem Fall ist 192.168.178.1, der DNS-Standardport ist 53), daher gibt Docker die oben genannte Fehlermeldung aus.