Last active
September 20, 2017 08:09
-
-
Save MarkusMattinen/e73689658884d865218140ca225eb050 to your computer and use it in GitHub Desktop.
Docker Swarm node update issue: Script to reproduce locally
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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