Docker Swarm 스택에서 하나의 서비스 다시 시작


80

docker swarm이 전체 스택을 다시 시작하지 않고 스택의 일부인 하나의 서비스를 다시 시작하도록하는 방법이 있는지 아는 사람이 있습니까?

답변:


109

이렇게 docker stack deploy나를 다시하는 업데이트 서비스로 이동하는 방법입니다. 로 프랑소와 '대답 , 또한 내 자신의 경험에서, 일을 너무 필요가 업데이트 할 것을에만 서비스를 업데이트합니다.

그러나 때로는 테스트 할 때 단일 서비스 만 다시 시작하는 것이 더 쉬워 보입니다. 제 경우에는 볼륨을 지우고 서비스를 업데이트하여 새 것처럼 시작해야했습니다. 설명 할 방법에 단점이 있는지 확실하지 않습니다. 나는 그것을 내 개발 스택에서 테스트했고 그것은 나를 위해 잘 작동했습니다.

해체하려는 서비스 ID를 가져온 다음이를 사용 docker service update --force <id>하여 효과적으로 다시 배포하는 서비스 업데이트를 강제 실행합니다.

$ docker stack services <stack_name>
ID                  NAME              ...
3xrdy2c7pfm3        stack-name_api    ...

$ docker service update --force 3xrdy2c7pfm3

--force플래그는 서비스를 강제로 업데이트하여 다시 시작합니다.


69

0으로 확장 및 백업 :

docker service scale myservice=0
docker service scale myservice=10

2
이것은 실제로 재시작을 강제하는 유일한 것입니다. 감사!
the_ccalderon

1
동의, 업데이트를 강제하는 것만으로 서비스가 다시 시작되지 않았습니다. 이유를 모르겠습니다
Egor

이 방법은 서비스를 중단하는 것처럼 보이지만 어떻게 든 서비스는 짐승의 깊숙한 곳에 숨어 있습니다. 예를 들어 서비스를 축소하고 동일한 포트를 사용하는 다른 서비스를 회전하려고하면 '이미 사용중인 포트'가 표시됩니다.
netlander 20.11.02

14

docker stack문서를 보면 :

자세한 설명

떼의 compose 또는 dab 파일에서 스택 생성 및 업데이트

에서 이 블로그 기사 : docker stack와 유사한 방식으로 작동합니다 docker compose. 그것은이다 나무 등 . 스택이 이미 배포 된 경우 docker stack deploy업데이트 된 다이제스트 또는 태그가있는 서비스 만 다시 시작합니다.

도커 스택 프로세스

경험상 하나의 서비스가 변경된 상태에서 동일한 스택을 다시 배포 하면 업데이트 된 서비스 만 다시 시작 됩니다.

하지만 ... 고려되는 변경 사항에 몇 가지 제한이있는 것 같습니다 (일부 이미지 태그가있는 버그 보고 ). 시도해보고 예상대로 작동하는지 확인하십시오.

service update변경 사항으로 업데이트 된 경우에만 대상 서비스를 확인하려는 경우 에도 사용할 수 있습니다 .

이 유사한 SO QA를 참조 할 수도 있습니다 .


감사합니다. 예상대로 작동합니다. 실제로 롤링 방식으로 특정 서비스 (또는 전체 스택)를 강제로 다시 시작하려고합니다. 불행히도 내가 다루는 일부 서비스는 캐시 무효화에 문제가 있으며 업데이트를 강제하기 위해 스택을 제거 / 재배포해야합니다. service update문서를 살펴보면 env내장 된 방법이 없다면 변수를 추가 / 제거 하여 가짜로 만들 수 있습니다 .
tweeks200

똑같은 것을 찾고 있었지만 문서에서 찾을 수 없습니다.
Morgan Kobeissi

다음 문제가 발생 docker stack deploy했습니다. 서비스를 시작하지 않습니다 (openldap). 로그 파일을 찾을 수 없습니다. docker-compose run <service>문제없이 컨테이너를 시작합니다. 마침내 일 docker service update --force <servce>했습니다.
rhoerbe

0

롤링 업데이트 문서 의 예에 따라 :

$ docker 서비스 업데이트 --image redis : 3.0.7 redis

그러나 이미지가 이미 로컬 컴퓨터에있는 경우에만 작동합니다. 그렇지 않은 경우 --with-registry-auth를 사용하여 레지스트리 인증 세부 정보를 swarm 에이전트에 보내야합니다. Docker 서비스 업데이트 문서 에서 세부 사항을 참조하십시오 .

$ docker 서비스 업데이트 --with-registry-auth --image redis : 3.0.7 redis


-1

그것을 제거하십시오 :

docker stack rm stack_name

재배포 :

docker stack deploy -c docker-compose.yml stack_name

위에 허용 된 답변은 작동하며 다운 타임을 피하기 위해 롤링 방식으로 수행됩니다
tweeks200
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.