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해도 진입 점에는 영향을주지 않습니다. 귀하의 예에서 당신 entrypoint은 bash내가 추측합니다. 이를 복원력있게 만들려면 ((내장과 무관 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.