Skip to content

Instantly share code, notes, and snippets.

@rodrisan
Forked from Gems/docker-compose.sh
Created March 17, 2022 23:21
Show Gist options
  • Save rodrisan/a310b825b66e728ae42009f7325ee78b to your computer and use it in GitHub Desktop.
Save rodrisan/a310b825b66e728ae42009f7325ee78b to your computer and use it in GitHub Desktop.
A `docker-compose` wrapper for multiple configuration files with relative paths
#!/usr/bin/env bash
TMP_FILE=/tmp/docker-compose.$$.yaml
finish() {
rm ${TMP_FILE} ${TMP_FILE}.tmp 2>/dev/null
}
trap finish EXIT
compose-config() {
mv -f ${TMP_FILE} ${TMP_FILE}.tmp
docker-compose -f ${1} -f ${TMP_FILE}.tmp config > ${TMP_FILE}
rm -f ${TMP_FILE}.tmp 2>/dev/null
}
args=()
files=()
while :; do
getopts ":" opt
case $OPTARG in
f) files+=(${!OPTIND})
;;
?) args+=("-${OPTARG}" "${!OPTIND}")
;;
*) args+=("${!OPTIND}")
;;
esac
((OPTIND++))
[ $OPTIND -gt $# ] && break
done
echo 'version: "3"' > ${TMP_FILE}
for f in ${files[@]}; do
compose-config ${f}
done
docker-compose -f ${TMP_FILE} ${args[@]}
exit $?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment