Skip to content

Instantly share code, notes, and snippets.

@MarkusMattinen
Last active September 20, 2017 08:09
Show Gist options
  • Save MarkusMattinen/e73689658884d865218140ca225eb050 to your computer and use it in GitHub Desktop.
Save MarkusMattinen/e73689658884d865218140ca225eb050 to your computer and use it in GitHub Desktop.
Docker Swarm node update issue: Script to reproduce locally
#!/bin/bash
set -euo pipefail
MANAGER_NAME="node-update-issue-manager"
PLUGIN_NAME="tiborvass/sample-volume-plugin"
# Create a new Docker machine to act as the Swarm manager
docker-machine create --driver virtualbox $MANAGER_NAME
# Shutdown and remove the Docker machine when exiting
trap "docker-machine rm -f $MANAGER_NAME" EXIT
# Run docker commands on the manager
eval $(docker-machine env $MANAGER_NAME)
# Preinstall the plugin so we can enable it faster when we want
docker plugin install $PLUGIN_NAME
docker plugin disable $PLUGIN_NAME
# Initialize Swarm
MANAGER_IP="$(docker-machine ip $MANAGER_NAME)"
docker swarm init --advertise-addr "$MANAGER_IP"
# Create a network so that we can see if the service was registered to Docker DNS
docker network create -d overlay testnet
# Create a service with a templated environment variable
docker service create -d --name testservice --health-cmd /bin/true --health-interval 60s --network testnet --env 'SLOT={{ .Task.Slot }}' busybox sleep 3600
# Wait for container to be created
while ! docker service ps --format '{{ .CurrentState }}' testservice | grep -q Starting; do echo -n .; sleep 1; done
# Node update will be triggered within 20 seconds of enabling the plugin
docker plugin enable $PLUGIN_NAME
echo "======"
echo "Waiting 20 seconds for node update..."
echo "======"
sleep 20
echo "======"
echo "Health check not yet run, container and service should be starting:"
echo "======"
docker ps
docker service ps testservice
echo "======"
echo "Waiting 50 seconds for health check..."
echo "======"
sleep 50
echo "======"
echo "Health check has been run, container and service should be running:"
echo "======"
docker ps
docker service ps testservice
echo "======"
echo "Service should be registered to Docker DNS:"
echo "======"
docker network inspect --verbose testnet
echo "======"
echo "Press Ctrl-C to exit now. Press any other key to print Docker daemon logs before exiting."
echo "======"
read -n 1
echo "======"
echo "Docker daemon logs:"
echo "======"
docker-machine ssh $MANAGER_NAME cat /var/log/docker.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment