github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/integration/build/testdata/Dockerfile.testBuildPreserveOwnership (about) 1 # Set up files and directories with known ownership 2 FROM busybox AS source 3 RUN touch /file && chown 100:200 /file \ 4 && mkdir -p /dir/subdir \ 5 && touch /dir/subdir/nestedfile \ 6 && chown 100:200 /dir \ 7 && chown 101:201 /dir/subdir \ 8 && chown 102:202 /dir/subdir/nestedfile 9 10 FROM busybox AS test_base 11 RUN mkdir -p /existingdir/existingsubdir \ 12 && touch /existingdir/existingfile \ 13 && chown 500:600 /existingdir \ 14 && chown 501:601 /existingdir/existingsubdir \ 15 && chown 501:601 /existingdir/existingfile 16 17 18 # Copy files from the source stage 19 FROM test_base AS copy_from 20 COPY --from=source /file . 21 # Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it 22 COPY --from=source /dir /dir 23 # Copying to an existing target directory will copy the _contents_ of the source directory into it 24 COPY --from=source /dir/. /existingdir 25 26 RUN e="100:200"; p="/file" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 27 && e="0:0"; p="/dir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 28 && e="101:201"; p="/dir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 29 && e="102:202"; p="/dir/subdir/nestedfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 30 # Existing files and directories ownership should not be modified 31 && e="500:600"; p="/existingdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 32 && e="501:601"; p="/existingdir/existingsubdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 33 && e="501:601"; p="/existingdir/existingfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 34 # But new files and directories should maintain their ownership 35 && e="101:201"; p="/existingdir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 36 && e="102:202"; p="/existingdir/subdir/nestedfile"; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi 37 38 39 # Copy files from the source stage and chown them. 40 FROM test_base AS copy_from_chowned 41 COPY --from=source --chown=300:400 /file . 42 # Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it 43 COPY --from=source --chown=300:400 /dir /dir 44 # Copying to an existing target directory copies the _contents_ of the source directory into it 45 COPY --from=source --chown=300:400 /dir/. /existingdir 46 47 RUN e="300:400"; p="/file" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 48 && e="300:400"; p="/dir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 49 && e="300:400"; p="/dir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 50 && e="300:400"; p="/dir/subdir/nestedfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 51 # Existing files and directories ownership should not be modified 52 && e="500:600"; p="/existingdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 53 && e="501:601"; p="/existingdir/existingsubdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 54 && e="501:601"; p="/existingdir/existingfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 55 # But new files and directories should be chowned 56 && e="300:400"; p="/existingdir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \ 57 && e="300:400"; p="/existingdir/subdir/nestedfile"; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi