If any of the RUN
commands return a non-zero code, the build will fail.
FROM fedora
RUN false
In the Dockerfile above, I'm just doing a quick test by running false
. false
is a linux utility that just sets a non-zero return code, handy for testing. As you can see, when I build that Dockerfile, it complains and fails out.
$ docker build .
Uploading context 12.29 kB
Uploading context
Step 0 : FROM fedora
---> 58394af37342
Step 1 : RUN false
---> Running in a5b9a4b37e25
2014/04/22 09:41:19 The command [/bin/sh -c false] returned a non-zero code: 1
Now that we know this, if we have the file and checksums in the image (which you appear to have via wget
), we can test that they match up. Here is a quick and dirty version of this below, in which I generate a file and calculate its checksum before verifying it. In your example, you would obviously not be doing that, I just do it to show you how this works.
FROM fedora
# Create the text file
RUN echo ThisIsATest > echo.txt
# Calculate the checksum
RUN sha1sum echo.txt > sha1sums.txt
# Validate the checksum (this should pass)
RUN sha1sum -c sha1sums.txt
# Alter the text
RUN echo ThisShouldFail > echo.txt
# Validate the checksum (this should now fail)
RUN sha1sum -c sha1sums.txt
And if we run this...
$ docker build -no-cache .
Warning: '-no-cache' is deprecated, it will be removed soon. See usage.
Uploading context 12.8 kB
Uploading context
Step 0 : FROM fedora
---> 58394af37342
Step 1 : RUN echo ThisIsATest > echo.txt
---> Running in cd158d4e6d91
---> 4088b1b4945f
Step 2 : RUN sha1sum echo.txt > sha1sums.txt
---> Running in 5d028d901d94
---> c97b1d31a720
Step 3 : RUN sha1sum -c sha1sums.txt
---> Running in 44d119897164
echo.txt: OK
---> ca01d590cadd
Step 4 : RUN echo ThisShouldFail > echo.txt
---> Running in 87b575ac4052
---> 36bb5d8cf6d1
Step 5 : RUN sha1sum -c sha1sums.txt
---> Running in e20b7ac0c924
echo.txt: FAILED
WARNING: 1 computed checksum did NOT match
2014/04/22 10:29:07 The command [/bin/sh -c sha1sum -c sha1sums.txt] returned a non-zero code: 1