yml tag run dind compose docker docker-compose gitlab-ci

tag - Ejecute la compilación docker-compose en.gitlab-ci.yml



gitlab docker registry (5)

Creé un contenedor de ventana acoplable simple que tiene la docker-compose crear una ventana docker-compose instalada en la parte superior de la docker:latest . Consulte https://hub.docker.com/r/tmaier/docker-compose/

Su archivo .gitlab-ci.yml se vería así:

image: tmaier/docker-compose:latest services: - docker:dind before_script: - docker info - docker-compose --version buildJob: stage: build tags: - docker script: - docker-compose build

Tengo un archivo .gitlab-ci.yml que contiene lo siguiente:

image: docker:latest services: - docker:dind before_script: - docker info - docker-compose --version buildJob: stage: build tags: - docker script: - docker-compose build

Pero en ci-log recibo un mensaje:

$ docker-compose --version /bin/sh: eval: line 46: docker-compose: not found

¿Qué estoy haciendo mal?


Docker compose también tiene una imagen oficial : docker/compose

Esta es la solución ideal si no desea instalarla en todas las tuberías.

Actualmente no tiene una etiqueta latest , por lo que tendrá que actualizar manualmente.

Dado que la imagen utiliza docker-compose como punto de entrada, deberá reemplazar el punto de entrada de nuevo a /bin/sh -c en su .gitlab-ci.yml . De lo contrario, su tubería fallará si no se ejecuta No such command: sh

# Official docker compose image. image: name: docker/compose:1.22.0 # update tag to whatever version you want to use. entrypoint: ["/bin/sh", "-c"] services: - docker:dind before_script: - docker version - docker-compose version build: stage: build script: - docker-compose down - docker-compose build - docker-compose up tester-image


La solución de @tmaier se basa en una imagen de terceros y realmente no me gusta esto. Solo tiene que instalar dos paquetes para obtener su propia configuración de dind y siempre actualizada con docker-compose:

# .gitlab-ci.yml image: docker services: - docker:dind build: script: - apk add --no-cache py-pip # <-- - pip install docker-compose # <-- - docker-compose up -d


Si no desea proporcionar una imagen de docker personalizada con preinstalación de composición de docker, puede hacer que funcione instalando Python durante el tiempo de compilación. Con Python instalado, finalmente puede instalar el docker-compose listo para girar sus contenedores.

image: docker:latest services: - docker:dind before_script: - apk add --update python py-pip python-dev && pip install docker-compose # install docker-compose - docker version - docker-compose version test: cache: paths: - vendor/ script: - docker-compose up -d - docker-compose exec -T php-fpm composer install --prefer-dist - docker-compose exec -T php-fpm vendor/bin/phpunit --coverage-text --colors=never --whitelist src/ tests/

Utilice exec docker-compose con -T si recibe este o un error similar:

$ docker-compose exec php-fpm composer install --prefer-dist Traceback (most recent call last): File "/usr/bin/docker-compose", line 9, in <module> load_entry_point(''docker-compose==1.8.1'', ''console_scripts'', ''docker-compose'')() File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 62, in main command() File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 114, in perform_command handler(command, command_options) File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 442, in exec_command pty.start() File "/usr/lib/python2.7/site-packages/dockerpty/pty.py", line 338, in start io.set_blocking(pump, flag) File "/usr/lib/python2.7/site-packages/dockerpty/io.py", line 32, in set_blocking old_flag = fcntl.fcntl(fd, fcntl.F_GETFL) ValueError: file descriptor cannot be a negative integer (-1) ERROR: Build failed: exit code 1


EDITAR Agregué otra respuesta proporcionando un ejemplo mínimo para una configuración .gitlab-ci.yml compatible con docker-compose.

docker-compose se puede instalar como un paquete de Python, que no se incluye con su imagen. La imagen que eligió ni siquiera proporciona una instalación de Python:

$ docker run --rm -it docker sh / # find / -iname "python" / #

Buscando Python da un resultado vacío. Por lo tanto, tiene que elegir una imagen diferente, que se ajuste a sus necesidades y, idealmente, tiene instalada la ventana acoplable o puede crear una.

La imagen de docker que eligió utiliza Alpine Linux. Puede usarlo como base para su propia imagen o probar una diferente primero si no está familiarizado con Alpine Linux.

Tuve el mismo problema, creé un Dockerfile en un repositorio público de GitHub, lo conecté con mi cuenta de Docker Hub y elegí una compilación automática para construir mi imagen en cada envío al repositorio de GitHub. Luego, puede acceder fácilmente a sus propias imágenes con el GitLab CI.