docker-compose를 사용하거나 실행해야합니까?


129

파일 run을 시작하는 데 사용할 이유가 있습니까, docker-compose.yml아니면 그냥 사용해야 up합니까?

run특정 컨테이너를 시작할 수 있음을 이해 하지만 컨테이너를 지정하지 않고 컨테이너를 사용하여 모든 yml 컨테이너를 시작하는 경우를 언급하고 있습니다.

답변:


141

docker-compose run(2015) 에서 언급했듯이

run이 전달한 명령은 서비스 구성에 정의 된 명령보다 우선합니다 .
예를 들어 웹 서비스 구성이로 시작 bash되면을 (를) docker-compose run web python app.py재정의합니다 python app.py.

두 번째 차이점은 docker-compose run명령 이 서비스 구성에 지정된 포트를 작성하지 않는다는 것 입니다.
이렇게하면 포트가 이미 열려있는 포트와 충돌하지 않습니다. 서비스 포트를 작성하여 호스트에 맵핑하려면 --service-ports 플래그를 지정하십시오.

$ docker-compose run --service-ports web python manage.py shell

따라서 특정 요구 사항 (명령을 재정의하거나 다른 포트에서 하나의 컨테이너 만 실행)이 없으면 (하나의 컨테이너에 docker-compose up대해서도) 충분합니다.

포트 생성을 원하지 않는 이유 또는시기를 설명 할 수 있습니까? 그렇기 때문에 이미 열려있는 포트와 충돌 할 수 있습니다

단순히 docker-compose run서비스에 대한 일회성 명령을 실행 하기 때문 입니다.
즉, 이미을 수행 한 docker-compose up경우 모든 컨테이너가 이미 지정된 포트에서 실행 중임을 의미합니다 docker-compose.yml.
을하는 docker-compose run이 단계에서이 같은 포트를 존중 경우, 즉시 실패, (일회성 명령을 실행하기 위해). 따라서 해당 포트의 기본 비 작성.


또 다른 유스 케이스 ( Compose 환경 변수 참조 ) :

서비스에 사용 가능한 환경 변수를 보려면을 실행하십시오 docker-compose run SERVICE env.


해당 명령의 최신 (2019+) 버전은 다음과 docker/docker.github.io같습니다.


27

pdb 디버거와 함께 Python을 사용하는 경우 다음과 같이 지적하고 싶습니다.

import pdb; pdb.set_trace()

다음을 사용하여 스크립트를 실행하면 쉘로 떨어지지 않습니다.

docker-compose up

그러나 run을 사용하면 예상대로 디버거로 드롭 다운됩니다.

docker-compose run

7

docker docs 에서 답변이 있습니다 .

일반적으로을 원합니다 docker-compose up. 에 up정의 된 모든 서비스를 시작하거나 다시 시작하는 데 사용 합니다 docker-compose.yml. 기본 "첨부 된"모드에서는 모든 컨테이너의 모든 로그가 표시됩니다. "분리"모드 ( -d)에서 컨테이너를 시작한 후 작성이 종료되지만 컨테이너는 백그라운드에서 계속 실행됩니다.

docker-compose run명령은 "일회용"또는 "임시"작업을 실행하기위한 것입니다. 실행하려는 서비스 이름이 필요하며 실행중인 서비스가 의존하는 서비스의 컨테이너 만 시작합니다. run 테스트를 실행하거나 데이터 볼륨 컨테이너에 데이터 제거 또는 추가와 같은 관리 작업을 수행하는 데 사용 합니다. 이 run명령은 docker run -ti컨테이너에 대화식 터미널을 열고 컨테이너의 프로세스 종료 상태와 일치하는 종료 상태를 반환하는 것과 같은 역할 을합니다.


1
이것이 정답입니다. 기본적으로 docker-compose run실행중인 서비스에 대해 명령을 실행 docker-compose up하고 새 서비스를 생성하는 데 사용합니다.
goonerify
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.