docker-compose.yml에서 서비스를 비활성화하는 방법이 있습니까?


84

docker-compose파일 에서 서비스를 일시적으로 비활성화하고 싶은 상황에 처해 있습니다.

물론 주석을 달 수는 있지만 " enabled: false" 라고 말할 수있는 옵션이 있습니까?


3
대답은 "그것은 당신이 성취하려는 것에 달려있다"입니다. 실행 docker-compose up하면 기본적으로 모든 서비스가 시작됩니다. 그러나 실행 docker-compose up myservice하면 myservice와 그에 의존하는 것들이 시작됩니다. 종속성을 설정하면이 명령으로 잘못된 서비스가 시작되지 않도록 만들 수 있습니다. docker-compose run원하는 서비스를 받기 위해 할 수도 있습니다 . 올바른 선택은 필요한 유연성을 허용하기 위해 여러 작성 파일로 분할하는 것입니다.
Paul Becotte 2016 년

내가 가진 유사한 요구를 처리하기 위해, 나는 놀 depends_on 과의 서비스 인수 고정 표시기-작성까지 , 또는 옵션 --no-deps은 종속성을 시작하지 않으려는 경우이다. 나는 당신이 찾고있는 것이 아니라 그 반대임을 압니다.
Gonzalo

또 다른 옵션은 필요한만큼 docker-compose 파일을 만들고 호출에 포함 할 파일을 선택하는 것입니다 docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d. 결과 docker compose merge를 config 명령으로 확인할 수 있습니다 .docker-compose -f docker-compose.yml -f another-docker-compose.yml config
Gonzalo


@EshaanBansal 나는 그런 기능을 모른다.
VonC

답변:


40

entrypoint또는command 명령을 아무 작업도 수행하지 않는 것으로 대체하기 위해 또는를 재정의 할 수 있습니다 ( /bin/true)

그러면 컨테이너가 즉시 종료되고 아무 작업도 수행되지 않습니다.


shadi 는 주석에 다음 팁을 추가합니다.

서비스를 전혀 빌드하지 않으려면 다음 Dockerfile만 있는을 가리 키도록 빌드 키를 재정의하십시오 .

FROM tianon/true 
ENTRYPOINT ["/true"]

5andr0 은 주석 에서 최상위 섹션x-disabled: (확장 필드 유사)을 지적합니다 .

훨씬 더 편리 : 비활성화 된 서비스를 x-disabled:대신 최상위 섹션 으로 이동services:

x-접두사가있는 섹션 은 구문 분석되지만 확장 필드로 의도 한 방식으로 사용되지 않으면 무시됩니다.


14
나는 또한 restart: "no"무한 재시작을 피하기 위해 추가 / 변경할 것입니다
DUzun

2
이 서비스를 비활성화하려는 이유가 서비스를 시작할 수 없기 때문인 경우에는 도움이되지 않습니다. 제 경우에는 다른 postgres 인스턴스가 실행 중이기 때문에 I postgres가 시작되지 않고 포트 명령으로 인해 충돌이 발생합니다. 정의를 변경하기 시작할 수 있지만 그 시점에서 모든 것을 주석 처리하는 것이 더 쉽습니다.
blueFast

1
훨씬 더 편리함 : 비활성화 된 서비스를 x-disabled:대신 최상위 섹션 으로 이동services:
5andr0

@ 5andr0 흥미 롭군요. 해당 docker-compose 섹션에 대한 문서가 있습니까?
VonC

docs.docker.com/compose/compose-file/#extension-fields v3.4에 도입되었습니다. x- 접두사가있는 섹션은 구문 분석되지만 의도 한 방식으로 확장 필드로 사용되지 않으면 무시됩니다
5andr0

55

docker-compose.override.yaml파일 에서 할 수 있습니다 .

이 파일은 자동으로 읽고 docker-compose기본 docker-compose.yaml.

Git에서 제외 된 경우 각 개발자는 원본을 변경하지 않고 구성 (몇 가지 제한 사항)을 조정할 수 있습니다 docker-compose.yaml.

따라서 다음에서 foo진입 점을 재정 의하여 서비스 를 임시로 비활성화 할 수 있습니다 docker-compose.override.yaml.

version: "3"

services:
  foo:
    entrypoint: ["echo", "Service foo disabled"]

1
"다시 시작 : 중지되지 않은 경우"등이있는 경우 주석 처리하지 않으면 계속 다시 시작됩니다
Andreas

아이디어는 오버라이드 파일의 진입 점을 변경하는 것입니다. 재시작 정책이있는 경우 무한 절전 루프로 변경하십시오
Kos Prov

명확히하기 위해 VonC의 답변에서와 같이 docker-compose.yml에서 이것을 수행 할 수 있습니다. 체크인하고 다른 개발자와 공유하려는 경우 적합합니다. 또한 compose 파일 형식 v1은 "services"의 하위 키가 아니라 서비스 이름 (위 예에서는 foo)을 최상위 키로 허용합니다.
Denis Howe

1
이 솔루션은 -f 옵션을 사용하여 각 환경에 대해 다른 재정의 파일을 지정한 특정 환경 (예 : 개발 / 스테이징 / 프로덕션)에 대한 서비스를 비활성화 / 활성화하려는 경우 잘 작동합니다.
Justin Emery

docker-compose v3를 사용하면 서비스를 비활성화하기 위해 env를 사용할 수 있습니다. 즉, export XXX_ENTRYPOINT=/bin/true `entrypoint : [ "$ {XXX_ENTRYPOINT : -docker-entrypoint.sh}"]`
qxo

9

일시적으로 비활성화하려는 서비스에 다음과 같은 추가 줄을 추가합니다.

command: echo "{put your service name here} disabled"

어쨌든 시작하지만 아무것도하지 않습니다.


5
를 다시 정의 command해도 진입 점에는 영향을주지 않습니다. 귀하의 예에서 당신 entrypointbash내가 추측합니다. 이를 복원력있게 만들려면 ((내장과 무관 entrypoint) 명령이 아닌 진입 점을 다시 정의해야한다고 생각합니다.
blueFast

4

Docker compose yaml 파일에 정의 된 서비스를 비활성화하는 방법은 없습니다. VonC의 제안은 좋은 해결 방법입니다. 사용 가능한 옵션에 대해서는 docker compose documentation 아래를 참조하십시오 https://docs.docker.com/compose/compose-file/


2

다음을 사용하여 서비스를 0 개의 복제본으로 확장합니다. deploy : replicas : 0

불행히도 문서에 따르면 이것은 docker swarm에서만 작동합니다.


-3

나는 그것을 얻었다 :

docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')

-6

기본이지만 #서비스의 각 줄 시작 부분에를 추가합니다 .


3
질문은 서비스를 주석 처리하는 대안에 관한 것이 었습니다.
Michael Härtl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.