2016-06-14 3 views
3

데이터베이스가있는 PHPUnit (통합 테스트)를 실행할 수 있어야하므로 PHP가있는 컨테이너와 MySQL 데이터베이스가 연결된 컨테이너가 있습니다.연결된 도커 컨테이너를 자동으로 이동하는 방법은 무엇입니까?

기본 명령은 다음과 같습니다 : 나는 db 컨테이너를 생성하고이 명령을 실행하기 전에 시작

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

.

binarydata/phpunit 명령을 실행하면 컨테이너가 제거됩니다. 그러나 db 컨테이너는 계속 켜져 있습니다.

질문 : 연결된 컨테이너에서 --rm 기능을 어떻게 얻을 수 있습니까? 명령이 실행 된 후에도 제거됩니다.

+0

테스트를 시작하려면 무엇을 사용하고 있습니까? – Matt

+0

@Matt 나는 PHPStorm을 사용하고 있으며, 위의 명령은 쉘 스크립트로 감싸서 여기에 설명 된 것처럼 쉘 스크립트를 PHP 인터프리터로 사용합니다. http://obrown.io/2015/12/23/phpunit-docker-phpstorm .html –

답변

2

링크 된 컨테이너에서 --rm 기능을 어떻게 얻을 수 있습니까? 명령이 실행 된 후에도 제거됩니다.

먼저 도커 1.10 이상에서 --link을 사용할 필요가 없습니다. 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을 사용하면 더 이상 필요하지 않습니다. 그렇지 않으면 명령이 결코 반환되지 않으며 db 용기가 제거되지 않을 것

docker-compose up --abort-on-container-exit --force-recreate :

Matt는 의견에 다음 명령 및주의 사항을 제안합니다.
up 약간의 표준 출력이 있습니다.
테스트 종료 상태가 사라지면 대신 화면에 인쇄됩니다.

+0

이 명령은 한 번 실행되는 셸 스크립트라고 가정합니다. 쉘 스크립트 옆에'docker-compose.yml'을 넣고'docker run' 대신'docker-compose run'을 사용할 수 있습니까? –

+1

정확히. 좀더 정확하게 말하면, 그것은 도커가 될 것입니다. – VonC

+0

PhpUnit 구성 요소가'run'을 요구하므로 foreground에 있고 stdout이 나타납니다. – Matt

관련 문제