Запуск docker-compose на докере gitlab-ci-multi-runner

У меня есть проект, работающий на Docker с docker-compose для среды dev.

Я хочу запустить его на GitLabCI с помощью экземпляра gitlab-ci-multi-runner "Docker mode".

Вот мой файл .gitlab-ci.yml:

image: soullivaneuh/docker-bash

before_script:
  - apk add --update bash curl
  - curl --silent --location https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  - chmod +x /usr/local/bin/docker-compose
  - ./configure
  - docker-compose up -d

Обратите внимание, что soullivaneuh/docker-bash изображение - это только изображение докеры с установленным bash.

script не выполняется команда docker-compose up -d:

gitlab-ci-multi-runner 0.7.2 (998cf5d)
Using Docker executor with image soullivaneuh/docker-bash ...
Pulling docker image soullivaneuh/docker-bash:latest ...

Running on runner-1ee5079f-project-3-concurrent-1 via sd-59984...
Fetching changes...
Removing app/config/parameters.yml
Removing docker-compose.env
HEAD is now at 5c5e7ff remove docker service
From https://git.dummy.net/project/project
   5c5e7ff..45e643d  docker-ci  -> origin/docker-ci
Checking out 45e643dd as docker-ci...
Previous HEAD position was 5c5e7ff... remove docker service
HEAD is now at 45e643d... Remove docker info commands

$ apk add --update bash curl
fetch http://dl-4.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gz
OK: 10 MiB in 28 packages
$ curl --silent --location https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ ./configure
$ docker-compose up -d
bash: line 30: /usr/local/bin/docker-compose: No such file or directory

ERROR: Build failed with: exit code 1

Я абсолютно не знаю, почему это происходит.

Спасибо за помощь.

Ответ 1

No such file or directory вводит в заблуждение. Я получал это много раз, пытаясь запускать динамически связанные двоичные файлы, используя альпийский linux (который, по-видимому, вы используете).

Проблема (как я понимаю) заключается в том, что двоичный файл был скомпилирован и связан с glibc, но альпийский использует musl, а не glibc.

Вы можете использовать ldd /usr/local/bin/docker-compose, чтобы сообщить вам, какие библиотеки отсутствуют (или запустить его с помощью strace, если все остальное не работает).

Чтобы заставить его работать, может быть проще установить из источника python (https://docs.docker.com/compose/install/#install-using-pip), что и делает официальное изображение (https://github.com/docker/compose/blob/master/Dockerfile.run).

Или вы можете использовать изображение, построенное на debian или другом дистрибутиве, использующем glibc.