서강혁
서강혁

Reputation: 35

high availability with docker swarm mode

I have some problem using docker swarm mode .

I want to have high availability with swarm mode. I think I can do that with rolling update of swarm.

Something like this...

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

However there is a problem. My docker image have entrypoint. Because of this there is a little delay before the service(I mean docker container) is really up. But docker service just think the service is already running, because status of the container is 'Up'. Even the service still do some work on entrypoint. So some container return error when I try to connect the service.

For example, if I create docker service named 'test' and scale up to 4 with port 8080. I can access test:8080 on web browser. And I try to rolling update with --update-parallelism 1 --update-delay 10s options. After that I try to connect the service again.. one container return error.. Because Docker service think that container already run..even the container still doesn't up because of entrypoint. And after 10s another container return error.. because update is started and docker service also think that container is already up.

So.. Is there any solution to solve this problem? Should I make some nginx settings for disconnect connection to error container and reconnect another one?

Upvotes: 1

Views: 474

Answers (1)

Elton Stoneman
Elton Stoneman

Reputation: 19194

The HEALTHCHECK Dockerfile command works for this use case. You specify how Docker should check if the container is available, and it gets used during updates as well as checking service levels in Swarm.

There's a good article about it here: Reducing Deploy Risk With Docker’s New Health Check Instruction.

Upvotes: 1

Related Questions