tag - El corredor de GitLab CI no puede conectarse a unix:///var/run/docker.sock en kubernetes
gitlab runner on docker (2)
GitLab se está ejecutando en el clúster kubernetes. El corredor no puede crear una imagen acoplable con artefactos de compilación. Ya he intentado varios enfoques para solucionar este problema, pero no hubo suerte. Aquí hay algunos fragmentos de configs:
.gitlab-ci.yml
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay
stages:
- build
- package
- deploy
maven-build:
image: maven:3-jdk-8
stage: build
script: "mvn package -B --settings settings.xml"
artifacts:
paths:
- target/*.jar
docker-build:
stage: package
script:
- docker build -t gitlab.my.com/group/app .
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.my.com/group/app
- docker push gitlab.my.com/group/app
config.toml
concurrent = 1
check_interval = 0
[[runners]]
name = "app"
url = "https://gitlab.my.com/ci"
token = "xxxxxxxx"
executor = "kubernetes"
[runners.kubernetes]
privileged = true
disable_cache = true
Paquete de registro de la etapa:
running with gitlab-ci-multi-runner 1.11.1 (a67a225)
on app runner (6265c5)
Using Kubernetes namespace: default
Using Kubernetes executor with image docker:latest ...
Waiting for pod default/runner-6265c5-project-4-concurrent-0h9lg9 to be running, status is Pending
Waiting for pod default/runner-6265c5-project-4-concurrent-0h9lg9 to be running, status is Pending
Running on runner-6265c5-project-4-concurrent-0h9lg9 via gitlab-runner-3748496643-k31tf...
Cloning repository...
Cloning into ''/group/app''...
Checking out 10d5a680 as master...
Skipping Git submodules setup
Downloading artifacts for maven-build (61)...
Downloading artifacts from coordinator... ok id=61 responseStatus=200 OK token=ciihgfd3W
$ docker build -t gitlab.my.com/group/app .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ERROR: Job failed: error executing remote command: command terminated with non-zero exit code: Error executing in Docker Container: 1
¿Qué estoy haciendo mal?
Cuando use Kubernetes, debe ajustar su imagen de compilación para conectarse con el motor Docker.
Agregue a su imagen de construcción:
DOCKER_HOST=tcp://localhost:2375
Cita de la documentación:
Ejecutar la ventana acoplable: también conocida como la imagen de la ventana acoplable, también es posible, pero lamentablemente necesita que los contenedores se ejecuten en modo privilegiado. Si está dispuesto a asumir ese riesgo, surgirán otros problemas que a primera vista podrían no parecer tan sencillos. Debido a que el demonio docker se inicia como un servicio generalmente en su .gitlab-ci.yaml, se ejecutará como un contenedor separado en su pod. Básicamente, los contenedores en pods solo comparten volúmenes asignados a ellos y una dirección IP a través de la cual pueden comunicarse entre sí utilizando localhost. /var/run/docker.sock no es compartido por la ventana acoplable: contiene el contenedor y el binario de la ventana acoplable intenta usarlo por defecto. Para sobrescribir esto y hacer que el cliente use tcp para contactar al demonio docker en el otro contenedor, asegúrese de incluir DOCKER_HOST = tcp: // localhost: 2375 en las variables de entorno del contenedor de compilación.
No necesita usar esto:
DOCKER_DRIVER: overlay
porque parece que OVERLAY no es compatible, por lo que svc-0 container no puede comenzar con eso:
$ kubectl logs -f `kubectl get pod |awk ''/^runner/{print $1}''` -c svc-0
time="2017-03-20T11:19:01.954769661Z" level=warning msg="[!] DON''T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON''T KNOW WHAT YOU''RE DOING [!]"
time="2017-03-20T11:19:01.955720778Z" level=info msg="libcontainerd: new containerd process, pid: 20"
time="2017-03-20T11:19:02.958659668Z" level=error msg="''overlay'' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."
Además, agregue export DOCKER_HOST="tcp://localhost:2375"
a la construcción de docker:
docker-build:
stage: package
script:
- export DOCKER_HOST="tcp://localhost:2375"
- docker build -t gitlab.my.com/group/app .
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.my.com/group/app
- docker push gitlab.my.com/group/app