2016-06-14 10 views
3

У меня есть контейнер с PHP и связанный контейнер с базой данных MySQL, потому что мне нужна возможность запуска PHPUnit с базой данных (интеграционные тесты).Как спрятать связанный контейнер Docker?

Основная команда выглядит следующим образом:

docker run -i --rm --link db binarydata/phpunit php script.php 

Я создал db контейнер и начал его перед выполнением этой команды.

binarydata/phpunit контейнер удаляется после выполнения команды. Но db контейнер остается в рабочем состоянии.

Вопрос: как я могу достичь функции --rm в связанном контейнере, поэтому он также будет удален после выполнения команды?

+0

Что вы используете для запуска тестов? – Matt

+0

@Matt Я использую PHPStorm, и вышеприведенная команда обернута в сценарий оболочки, чтобы использовать этот сценарий оболочки как php-интерпретатор, как описано здесь: http://obrown.io/2015/12/23/phpunit-docker-phpstorm .html –

ответ

2

Как я могу достичь функциональности в связанном контейнере, поэтому он также будет удален после выполнения команды?

Во-первых, вам больше не нужно использовать --link с докером 1.10+. docker-compose will create for you a network, в котором все контейнеры видят друг друга.
И с docker-compose alias, вы можете объявить свой binary/phpunit как «db» для использования в других контейнерах.

Во-вторых, если вы остановите/удалите контейнер php, он будет удален из указанной сети, включая его псевдоним «db».

Это отличается от старой ссылки (docker 1.8 and before), которая должна была бы иметь контейнер modify the /etc/hosts. В этом случае удаление связанного контейнера действительно не изменит /etc/hosts.
С new embedded docker-daemon DNS вам больше не нужно.

Matt предлагает в комментариях следующую команду и предостережений:

docker-compose up --abort-on-container-exit --force-recreate иначе команда никогда не возвращается и db контейнер никогда не будет удален.
up беспорядок с stdout немного.
Состояние выхода для тестов также будет потеряно, вместо этого оно будет напечатано на экране.

+0

Я забыл упомянуть, что эта команда должна быть одноразовым сценарием оболочки. Могу ли я просто поставить 'docker-compose.yml' рядом с моим сценарием оболочки и использовать' docker-compose run' вместо 'docker run'? –

+1

Точно. Точнее, это будет докер-составление. – VonC

+0

Я предполагаю, что компонент PhpUnit потребует 'run', поэтому он находится на переднем плане и появляется stdout. – Matt

Смежные вопросы