Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sudo-bmitch/docker-stack-wait
Wait for a docker stack deploy to complete
https://github.com/sudo-bmitch/docker-stack-wait
Last synced: 10 days ago
JSON representation
Wait for a docker stack deploy to complete
- Host: GitHub
- URL: https://github.com/sudo-bmitch/docker-stack-wait
- Owner: sudo-bmitch
- License: mit
- Created: 2018-10-06T16:00:07.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2024-05-12T13:59:17.000Z (6 months ago)
- Last Synced: 2024-08-02T16:08:54.766Z (4 months ago)
- Language: Shell
- Size: 24.4 KB
- Stars: 174
- Watchers: 11
- Forks: 26
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-swarm - docker-stack-wait - Tool to wait for your docker stack deployments to finish. (Community Tools / Extra Functionality)
README
# Docker Stack Wait
Waits for a docker stack deploy to complete.
Example Usage:
`docker-stack-wait.sh $stack_name`
Help output:
```bash
$ ./docker-stack-wait.sh -h
docker-stack-wait.sh [opts] stack_name
-f filter: only wait for services matching filter, may be passed multiple
times, see docker stack services for the filter syntax
-h: this help message
-l flags: Print logs of relevant services at end.
Flags are passed directly to the end of 'docker service logs'.
Example usage: -l '--tail 20' or -l '--since 20m'
-n name: only wait for specific service names, overrides any filters,
may be passed multiple times, do not include the stack name prefix
-r: treat a rollback as successful
-s sec: frequency to poll service state (default 5 sec)
-t sec: timeout to stop waiting (default 3600 sec)
```## Usage as container
An image is available at:
- Docker Hub: `sudobmitch/docker-stack-wait`
- GHCR: `ghcr.io/sudo-bmitch/docker-stack-wait`To use this image, you will need to mount the docker socket:
```bash
$ docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
sudobmitch/docker-stack-wait $stack_name
```or with an alias
```bash
$ alias docker-stack-wait='docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
sudobmitch/docker-stack-wait'
```## Development
To test changes to the script easily, you can use the example `example-docker-compose.yml` file with:
```bash
docker-compose -f dind-docker-compose.yml up
docker-compose -f dind-docker-compose.yml exec dind sh
docker node ls || docker swarm init
docker stack deploy --compose-file work/example-docker-compose.yml the_stack
./work/docker-stack-wait.sh the_stack
```## Filter Examples
The `-n` and `-f` options allow to select a subset of the services in a stack.
With the following compose yml file:```yaml
version: '3.7'services:
normal:
image: busybox
command: /bin/sh -c ":>/healthy; tail -f /dev/null"
deploy:
labels:
deploy.wait: "true"
deploy.quick: "true"
healthcheck:
test: /bin/sh -c "[ -f /healthy ] && exit 0 || exit 1"
interval: 15s
start_period: 60s
retries: 3slow:
image: busybox
command: /bin/sh -c "sleep 50; :>/healthy; tail -f /dev/null"
deploy:
labels:
deploy.wait: "true"
healthcheck:
test: /bin/sh -c "[ -f /healthy ] && exit 0 || exit 1"
interval: 15s
start_period: 60s
retries: 3tooslow:
image: busybox
command: /bin/sh -c "sleep 300; :>/healthy; tail -f /dev/null"
deploy:
labels:
deploy.wait: "false"
healthcheck:
test: /bin/sh -c "[ -f /healthy ] && exit 0 || exit 1"
interval: 15s
start_period: 60s
retries: 3
```We can wait for only the first two services using labels:
```bash
docker-stack-wait.sh -f label=deploy.wait=true waittest
```Or by waiting on individual service names:
```bash
docker-stack-wait.sh -n normal -n slow waittest
```If you deploy a stack using multiple compose files, you can wait for the
services in a single compose file using the following example that uses
`docker-compose` to generate a list of services from one file:```bash
wait_args=""
for arg in $(docker-compose -f docker-compose.yml config --services 2>/dev/null); do
wait_args="${wait_args:+${wait_args} }-n $arg"
done
docker-stack-wait.sh $wait_args waittest
```