yml tag name images entrypoint cache docker gitlab kubernetes gitlab-ci-runner

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.

Gitlab-CI en Kubernetes


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