Запустите docker-compose из контейнера Docker - PullRequest
1 голос
/ 10 марта 2019

У меня Jenkins работает внутри контейнера Docker с установленным docker.sock.Могу ли я вызвать docker-compose из этого контейнера, чтобы запустить службу на хост-компьютере?Я пытался выполнить скрипт установки из контейнера, но он все время говорит

"нет такого файла или каталога".

docker exec jenkins curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker exec jenkins chmod +x /usr/local/bin/docker-compose

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Создайте свой собственный файл docker, основанный на образе, который вы используете для сборки (возможно, docker: latest)

Затем в строке RUN поместите загрузку docker-compose и установите ее как исполняемый файл.

Раскрутите агент jenkins для сборки из вашего образа вместо используемого по умолчанию.

вам нужно установить docker-compose на этот контейнер сборки, а не на мастер jenkins.

Для сборок в gitlab-ci Iбыл установлен специальный сборочный контейнер, основанный на образе докера, с дополнительно установленным compose.Я думаю, что это ваш случай - вы используете jenkins для вращения контейнера на основе docker: latest, который по умолчанию не имеет docker-compose.Вам нужно либо создать собственный образ из docker: latest, установить compose, либо использовать какой-нибудь образ из docekrhub, который делается следующим образом.

Кроме того, вы можете попробовать установить compose как часть вашей сборки.Просто скачайте его в какой-нибудь локальный каталог и используйте его оттуда.

0 голосов
/ 10 марта 2019

Это достижимо, но сложно понять это правильно.

Вам необходимо смонтировать с помощью тома докера путь, по которому файл docker-compose.yml находится на вашем хосте докера, к точно такой же папке в контейнере.

Таким образом, если местоположение файла docker-compose.yml /home/leonid/workspace/project1/docker-compose.yml на хосте докера, вам нужно добавить том -v /home/leonid/workspace/project1/:/home/leonid/workspace/project1/ для контейнера jenkins.

Затем в задании Jenkins:

cd /home/leonid/workspace/project1/
docker-compose up -d

Почему это так?

Имейте в виду, что docker-compose дает инструкции для механизма докера.Механизм докера работает на хосте докера (а не в контейнере Jenkins).Поэтому любой путь, указанный docker-compose для механизма докера, должен существовать на хосте докера.

...