#!/bin/bash set -e # wrapper around "docker build" that creates a temporary directory and copies files into it first so that arbitrary host directories can be copied into containers without bind mounts, but accepts a Dockerfile on stdin # usage: ./docker-build.sh some-host-directory some-new-image:some-tag < "$tmp/Dockerfile" from="$(awk -F '[ \t]+' 'toupper($1) == "FROM" { print $2; exit }' "$tmp/Dockerfile")" onbuilds="$(docker inspect -f '{{len .Config.OnBuild}}' "$from")" if [ "$onbuilds" -gt 0 ]; then # crap, the image we want to build has some ONBUILD instructions # those are kind of going to ruin our day # let's do some hacks to strip those bad boys out in a new fake layer "$(dirname "$(readlink -f "$BASH_SOURCE")")/remove-onbuild.sh" "$from" "$imageTag" awk -F '[ \t]+' 'toupper($1) == "FROM" { $2 = "'"$imageTag"'" } { print }' "$tmp/Dockerfile" > "$tmp/Dockerfile.new" mv "$tmp/Dockerfile.new" "$tmp/Dockerfile" fi cp -RL "$dir" "$tmp/dir" docker build -t "$imageTag" "$tmp" > /dev/null