docker-stack-waiter
Description
docker-stack-waiter
was created to compensate for the missing --detach=false
option of the docker stack deploy
command, and is specifically built to be part of a CI/CD pipeline.
It monitors the status of the services in a docker-compose.yml file, and waits for them to be completely updated. If any of the services did not exist, docker-stack-waiter
will wait for those services to reach the specified number of healthy replicas.
Caveat: Irrespective of this tool, it seems that if a service failes in the paused
state due to a task failure, if you run docker stack deploy
again without any changes, or if you run docker service update --detach <service_name>
, the service will always end up in the completed
state, and thus docker-stack-waiter
will report the service as successful. A workaround is to set the service's deploy.update_config.failure_action
field to rollback
.
Installation
Binary
Latest version can be downloaded from here
Docker image
docker container run \
--rm \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,readonly \
--mount "type=bind,source=${PWD},target=${PWD},readonly" \
--workdir "${PWD}" \
registry.gitlab.com/almbrand/docker-stack-waiter [-deploy] <namespace>
Usage
Run docker-stack-waiter
like this:
docker stack deploy -c docker-compose.yml <namespace> \
&& docker-stack-waiter <namespace>
or
docker-stack-waiter -deploy <namespace>
The -c
flag can be specified multiple times. The merged list of service names is used to find the services to wait for.
Environment variables
docker-stack-waiter
supports reading the COMPSE_FILE
and COMPOSE_PATH_SEPARATOR
variables to get the list of Docker Compose files to parse.
Contributing
Issues and merge requests welcome. Please create an issue and create the merge request from that, as it keeps it possible to discuss the issues and their potential solutions separately.
Credits
We basically ported the logic from this GitHub comment by @sorenhansendk to Golang and added a few bits and pieces, so thanks for that.
Authors:
- Sune Keller (@sirlatrom)
- Loke Norlin Johannessen (@ablojh)
License
The project is licensed under the MIT license.