Skip to content

Instantly share code, notes, and snippets.

@ggotti
Forked from schickling/_README.md
Last active January 30, 2018 18:05
Show Gist options
  • Save ggotti/811278f91f0f5a3463cb9ae75d56cfda to your computer and use it in GitHub Desktop.
Save ggotti/811278f91f0f5a3463cb9ae75d56cfda to your computer and use it in GitHub Desktop.
Script to import and export docker-machine configurations to sync between hosts/collaborators

docker-machine import/export

Script to import and export docker-machine configurations to sync between hosts/collaborators. Based on Schickling gist.

This version copies the

Export (on host A)

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS
dev        -        digitalocean   Running   tcp://example.com:2376                 v1.10.1

$ ./docker-machine-export.sh dev

//Dumps out a base64 version of the credentials
H4sIAAbVa1cAA+3W5VsTDuM1cKSlBgyQjtGNdHd3h3SjNIzRKd0NUzolBKR7SCnSLV0CAtI1YLDf/fwdz/fz8rw913WuQ5eEjYK56GqCgnYaYta4J9rsJHNiQnK82GFQ1yboRdd63txmlov1MeoudEuqExkaom0MMXFy9DMCpPtR+QoQeOGppCfTM/6Eq0IfUV72PwPR5dDRny9eEoq3ZEqLYeFldDbRskS7yTaEL2jojM7kL+OAQ0/PVeuXZk1fvn7NsWZQXZJHUVJj3toVUw1STaLY/zjO0/a4owRgQxLyN+vA/DggBSvVFnYUji5/wYtI2/V8ieuv1Cv+G96JRD4q4/H+GgVweYo107e0DsF8X1nmmkXbm4nbCQRlUYhnca/mU17qecc+mKJi6ETb0/7JXBedN1k4Yzh0dZhhaXzL0vcqakjisc6bEhIovLyIRXwPcDhXWIhCjdOOxl9NyYy9nVvnSU36Sw3sveSZSvphRHWRUCNwNiXzPmksmUrBn2Bt2H17xGBbT5fL2Dz3MkZbAeQKKOOOY3O+wnPvFpS15x9yvzF/lXNmZcknlkaQM6uKNeuiHShFTkSQ9nGVc9hG+PEo0VEdyhrqJMk7wowS4GV1VZhR+lIjIxjMNsm5cN7PWVBaF1g3n0Kl4TN

Import (on host B)

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS

$ export docker_cred = "H4sIAAbVa1cAA+3W5VsTDuM1cKSlBgyQjtGNdHd3h3SjNIzRKd0NUzolBKR7SCnSLV0CAtI1YLDf/fwdz/fz8rw913WuQ5eEjYK56GqCgnYaYta4J9rsJHNiQnK82GFQ1yboRdd63txmlov1MeoudEuqExkaom0MMXFy9DMCpPtR+QoQeOGppCfTM/6Eq0IfUV72PwPR5dDRny9eEoq3ZEqLYeFldDbRskS7yTaEL2jojM7kL+OAQ0/PVeuXZk1fvn7NsWZQXZJHUVJj3toVUw1STaLY/zjO0/a4owRgQxLyN+vA/DggBSvVFnYUji5/wYtI2/V8ieuv1Cv+G96JRD4q4/H+GgVweYo107e0DsF8X1nmmkXbm4nbCQRlUYhnca/mU17qecc+mKJi6ETb0/7JXBedN1k4Yzh0dZhhaXzL0vcqakjisc6bEhIovLyIRXwPcDhXWIhCjdOOxl9NyYy9nVvnSU36Sw3sveSZSvphRHWRUCNwNiXzPmksmUrBn2Bt2H17xGBbT5fL2Dz3MkZbAeQKKOOOY3O+wnPvFpS15x9yvzF/lXNmZcknlkaQM6uKNeuiHShFTkSQ9nGVc9hG+PEo0VEdyhrqJMk7wowS4GV1VZhR+lIjIxjMNsm5cN7PWVBaF1g3n0Kl4TN
"

$ ./docker-machine-import.sh

$ docker-machine ls
NAME       ACTIVE   DRIVER         STATE     URL                            SWARM   DOCKER    ERRORS
dev        -        digitalocean   Running   tcp://example.com:2376                 v1.10.1

Note

This script requires you to have the same $MACHINE_STORAGE_PATH/certs available on all host systems

#! /bin/bash
if [ -z "$1" ]; then
echo "Usage: machine-export.sh MACHINE_NAME"
echo ""
echo "Exports the specified docker-machine to the clipboard"
echo "Note: This script requires you to have the same \$MACHINE_STORAGE_PATH/certs available on all host systems"
exit 0
fi
machine_name=$1
docker-machine status $machine_name 2>&1 > /dev/null
if [ $? -ne 0 ]; then
echo "No such machine found"
exit 1
fi
set -e
MACHINE_STORAGE_PATH="${MACHINE_STORAGE_PATH:-"$HOME/.docker/machine"}"
machine_path="$MACHINE_STORAGE_PATH/machines/$machine_name"
tmp_path="/tmp/machine-export-$(date +%s%3)"
# copy to /tmp and strip out $MACHINE_STORAGE_PATH
mkdir -p $tmp_path
cp -r "$machine_path" "$tmp_path"
perl -pi -e "s|$MACHINE_STORAGE_PATH|__MACHINE__STORAGE_PATH__|g" $tmp_path/$machine_name/config.json
# create archive
tar -czf - -C "$tmp_path/$machine_name" . | gzip | base64
# cleanup
rm -rf $tmp_path
#! /bin/bash
set -e
tmp_path="./tmpMachine"
if [ -z ${docker_cred+x} ]; then
echo "$docker_cred environment variable is unset";
exit 1
fi
mkdir -p "${tmp_path}"
echo $docker_cred | base64 --decode | gzip -d | tar -zC ${tmp_path} -x
# Determine machine name from config
machine_name=`sed -En "s/.*\"MachineName\": \"(.*)\",$/\1/p" ${tmp_path}/config.json`
echo $machine_name
MACHINE_STORAGE_PATH="${MACHINE_STORAGE_PATH:-"$HOME/.docker/machine"}"
machine_path="$MACHINE_STORAGE_PATH/machines/$machine_name"
if [ -d "$machine_path" ]; then
echo "$machine_name already exists"
exit 1
fi
perl -pi -e "s|__MACHINE__STORAGE_PATH__|$MACHINE_STORAGE_PATH|g" $machine_name/config.json
mv "$machine_name" "$MACHINE_STORAGE_PATH/machines"
#
echo "Imported $machine_name to docker-machine ($machine_path)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment