Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

sudo-bmitch/docker-stack-wait

Open more actions menu

Repository files navigation

Docker Stack Wait

Waits for a docker stack deploy to complete.

Archive Notice

This project has been archived and is no longer being maintained. Docker has added the --detach CLI flag which allows similar functionality to be implemented with:

docker stack deploy --detach=false -c docker-compose.yaml $stack_name

CLI Usage

Example Usage:

docker-stack-wait.sh $stack_name

Help output:

$ ./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:

$ docker run --rm -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sudobmitch/docker-stack-wait $stack_name

or with an alias

$ 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:

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:

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: 3

  slow:
    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: 3

  tooslow:
    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:

docker-stack-wait.sh -f label=deploy.wait=true waittest

Or by waiting on individual service names:

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:

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

About

Wait for a docker stack deploy to complete

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Morty Proxy This is a proxified and sanitized view of the page, visit original site.