Получить идентификатор контейнера, созданного docker-compose - PullRequest
0 голосов
/ 04 февраля 2019

Мы используем Docker compose в нашем конвейере тестирования и запускаем несколько тестов параллельно (из одного коммита, например, модульные тесты + статические тесты типизации + качество кода ...).Проблема заключается в том, что в одном из тестов нам нужно запустить стек службы docker-compose, а затем exec в одном из контейнеров.

Однако из-за способа выполнения тестов docker-compose ps servicenameвернет несколько идентификаторов.

Мне нужно запустить docker-compose up -d и немедленно получить ID (и) запущенной службы (служб).Использование docker-compose ps не вариант.

Есть ли способ добиться этого?Единственный способ, который приходит мне в голову, - это использовать sed для замены container_name в моем docker-compose.yml на детерминированное, но уникальное имя только для тестов CI, но это выглядит грязно.

1 Ответ

0 голосов
/ 05 февраля 2019

В моем случае сработало использование магической переменной окружения COMPOSE_PROJECT_NAME.Когда эта переменная установлена ​​и docker-compose вызвана, она «ограничится» этим именем проекта.

Это означает, что:

# Start a new stack of containers, overriding their project name (it defaults to the directory name)
$ COMPOSE_PROJECT_NAME=foobar docker-compose up -d

# This gives empty result
$ docker-compose ps 

# This gives the containers started above
$ COMPOSE_PROJECT_NAME=foobar docker-compose ps

# This starts a whole new stack, not affecting the output of the commands above
$ COMPOSE_PROJECT_NAME=second docker-compose up -d 

# This still only returns the services started in the first command
$ COMPOSE_PROJECT_NAME=foobar docker-compose ps

Таким образом, я могу определить COMPOSE_PROJECT_NAMEкак слаг, составленный из коммита SHA и названия стадии / теста.Это делает имя уникальным и позволяет избежать конфликтов.

Это имеет тот же эффект, что и использование -p параметра docker-compose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...