Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 19 additions & 15 deletions docker-diff
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env bash
# https://github.com/moul/docker-diff

#
# Compare the contents of two Docker images.
Expand All @@ -16,27 +17,30 @@ then
exit 99
fi

TEST_IMAGE='busybox'
if [ $(docker images -q ${TEST_IMAGE} | wc -l) -lt 1 ]
then
docker pull ${TEST_IMAGE}
fi

CONTAINER_A_ID=$(docker create $1 /bin/sh)
CONTAINER_B_ID=$(docker create $2 /bin/sh)

if [[ ${IGNORE_FILESIZE} == 1 ]]
tmpdir=$(mktemp -d)

A=$1
B=$2

set -e
docker export "${CONTAINER_A_ID}" > ${tmpdir}/A.tar
docker export "${CONTAINER_B_ID}" > ${tmpdir}/B.tar
mkdir -p ${tmpdir}/${A} && tar -xf ${tmpdir}/A.tar -C ${tmpdir}/${A} --exclude='./etc/mtab' --exclude='./proc' --exclude='./dev'
mkdir -p ${tmpdir}/${B} && tar -xf ${tmpdir}/B.tar -C ${tmpdir}/${B} --exclude='./etc/mtab' --exclude='./proc' --exclude='./dev'
diff -arq ${tmpdir}/${A} ${tmpdir}/${B} | grep -v "No such file or directory" | grep -v "is a character special file" | grep -v "is a block special file" | tee >(wc -l > ${tmpdir}/difflinecount)
set +e

code=1
if [[ $(echo `cat ${tmpdir}/difflinecount`) == "0" ]]
then
AWK_STATEMENT='{printf "%-10s %-100s\n",$1,$6}'
else
AWK_STATEMENT='{printf "%-10s %-10s %-100s\n",$1,$3,$6}'
code=0
fi

diff \
<(docker export ${CONTAINER_A_ID} | docker run -i --rm ${TEST_IMAGE} tar tvf - | awk "${AWK_STATEMENT}") \
<(docker export ${CONTAINER_B_ID} | docker run -i --rm ${TEST_IMAGE} tar tvf - | awk "${AWK_STATEMENT}")
code=$?
rm -rf ${tmpdir}

docker rm -fv ${CONTAINER_A_ID} ${CONTAINER_B_ID} > /dev/null
docker rm -fv "${CONTAINER_A_ID}" "${CONTAINER_B_ID}" > /dev/null

exit $code