2016-10-28 3 views
1

docker swarm 모드를 사용하는 데 문제가 있습니다.docker swarm 모드로 고 가용성 표시

웜 모드로 고 가용성을 유지하려고합니다. 나는 떼의 롤링 업데이트로 할 수 있다고 생각한다. 이 같은

뭔가 ...

docker service update --env-add test=test --update-parallelism 1 --update-delay 10s 6bwm30rfabq4 

그러나 문제가있는 것입니다. 도커 이미지에 진입 점이 있습니다. 이 때문에 서비스 (나는 도커 컨테이너라는 뜻)가 실제로 시작되기까지 약간의 지연이 있습니다. 그러나 docker 서비스는 컨테이너의 상태가 'Up'이기 때문에 서비스가 이미 실행되고 있다고 생각합니다. 심지어 서비스조차도 진입 점에서 어떤 작업을 수행합니다. 따라서 일부 컨테이너는 서비스 연결을 시도 할 때 오류를 반환합니다.

예를 들어 'test'라는 도커 서비스를 만들고 8080 포트로 4 개까지 확장 할 수 있습니다. 웹 브라우저에서 test : 8080에 액세스 할 수 있습니다. 그리고 --update-parallelism 1 --update-delay 10s 옵션으로 업데이트를 시도합니다. 그 후에 서비스를 다시 연결하려고합니다. 하나의 컨테이너가 반환하는 오류입니다. Docker 서비스가 컨테이너가 이미 실행되었다고 생각하기 때문에 컨테이너가 여전히 진입 점 때문에 작동하지 않기 때문입니다. 그리고 10 초 후에 다른 컨테이너가 오류를 반환합니다 .. 왜냐하면 업데이트가 시작되고 부두 서비스도 컨테이너가 이미 작동 중이라고 생각하기 때문입니다.

그래서 ..이 문제를 해결할 수있는 해결책이 있습니까? 오류 컨테이너에 대한 연결을 끊고 다른 컨테이너를 다시 연결하기 위해 nginx 설정을해야합니까?

+0

'--update-delay'를 더 큰 값으로 늘리려고 했습니까? –

답변

1

HEALTHCHECK Dockerfile 명령은이 사용 사례에서 작동합니다. 컨테이너가 사용 가능한지 여부를 Docker가 확인하는 방법을 지정하고, 업데이트 중에 사용되며 Swarm에서 서비스 수준을 확인합니다.

여기에 대한 좋은 기사가 있습니다 : Reducing Deploy Risk With Docker’s New Health Check Instruction.

+0

이것은 정확히 내가 찾고있는 것입니다! –