Created
April 9, 2019 19:35
-
-
Save DiegoSeC/9888f26ebde532ac3a5cdef72b2593a7 to your computer and use it in GitHub Desktop.
# Docker Start Script Template
This file contains hidden or 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 | |
# Stop docker containers if exists | |
names=$(docker ps --format "{{.Names}}") | |
if [ ! -z "$names" ] | |
then | |
printf "\n\e[1;31mKilling the following containers:\e[0m\n\n" | |
while read -r name | |
do | |
eval "docker container stop $name" | |
done <<< "$names" | |
fi | |
# If --build flag is present run docker-compose build | |
if [ "$1" == "--build" ]; then | |
printf "\n\e[1;34mBuilding Docker\e[0m\n\n" | |
docker-compose build | |
fi | |
# Run docker-compose in detach mode | |
printf "\n\e[1;36mDocker Compose Up\e[0m\n\n" | |
docker-compose up -d | |
# Running migrations, check if knexfile exists | |
names=$(docker ps --format "{{.Names}}") | |
printf "\n\e[1;33mRunning migration from containers\e[0m\n" | |
while read -r name | |
do | |
eval "docker exec $name /bin/sh -c \"[ -d \"/$name\" ] && cd /$name && test -f knexfile.js && npm run migration --if-present\"" | |
done <<< "$names" | |
# Logging from containers | |
# CODE FROM: https://stackoverflow.com/a/38308974 | |
printf "\n\e[1;35mLogging\e[0m\n\n" | |
esc=$(printf '\e') | |
while read -r name | |
do | |
# eval to show container name in jobs list | |
eval "docker logs -f --tail=5 \"$name\" | sed -e \"s/^/${esc}[3$(( $RANDOM * 6 / 32767 + 1 ))m[-- $name --]${esc}[0m /\" &" | |
# For Ubuntu 16.04 | |
#eval "docker logs -f --tail=5 \"$name\" |& sed -e \"s/^/[-- $name --] /\" &" | |
done <<< "$names" | |
function _exit { | |
printf "\n\n\e[1;31mStopping tails $(jobs -p | tr '\n' ' ')\e[0m\n" | |
# Using `sh -c` so that if some have exited, that error will | |
# not prevent further tails from being killed. | |
jobs -p | tr '\n' ' ' | xargs -I % sh -c "kill % || true" | |
printf "\n\e[1;32mDone\e[0m" | |
} | |
# On ctrl+c, kill all tails started by this script. | |
trap _exit EXIT | |
# For Ubuntu 16.04 | |
#trap _exit INT | |
# Don't exit this script until ctrl+c or all tails exit. | |
wait |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment