답변:
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
같습니다.
docker docs 에서 답변이 있습니다 .
일반적으로을 원합니다
docker-compose up
. 에up
정의 된 모든 서비스를 시작하거나 다시 시작하는 데 사용 합니다docker-compose.yml
. 기본 "첨부 된"모드에서는 모든 컨테이너의 모든 로그가 표시됩니다. "분리"모드 (-d
)에서 컨테이너를 시작한 후 작성이 종료되지만 컨테이너는 백그라운드에서 계속 실행됩니다.이
docker-compose run
명령은 "일회용"또는 "임시"작업을 실행하기위한 것입니다. 실행하려는 서비스 이름이 필요하며 실행중인 서비스가 의존하는 서비스의 컨테이너 만 시작합니다.run
테스트를 실행하거나 데이터 볼륨 컨테이너에 데이터 제거 또는 추가와 같은 관리 작업을 수행하는 데 사용 합니다. 이run
명령은docker run -ti
컨테이너에 대화식 터미널을 열고 컨테이너의 프로세스 종료 상태와 일치하는 종료 상태를 반환하는 것과 같은 역할 을합니다.
docker-compose run
실행중인 서비스에 대해 명령을 실행docker-compose up
하고 새 서비스를 생성하는 데 사용합니다.