| # Set up files and directories with known ownership |
| FROM busybox AS source |
| RUN touch /file && chown 100:200 /file \ |
| && mkdir -p /dir/subdir \ |
| && touch /dir/subdir/nestedfile \ |
| && chown 100:200 /dir \ |
| && chown 101:201 /dir/subdir \ |
| && chown 102:202 /dir/subdir/nestedfile |
| |
| FROM busybox AS test_base |
| RUN mkdir -p /existingdir/existingsubdir \ |
| && touch /existingdir/existingfile \ |
| && chown 500:600 /existingdir \ |
| && chown 501:601 /existingdir/existingsubdir \ |
| && chown 501:601 /existingdir/existingfile |
| |
| |
| # Copy files from the source stage |
| FROM test_base AS copy_from |
| COPY --from=source /file . |
| # Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it |
| COPY --from=source /dir /dir |
| # Copying to an existing target directory will copy the _contents_ of the source directory into it |
| COPY --from=source /dir/. /existingdir |
| |
| 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 \ |
| && 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 \ |
| && 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 \ |
| && 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 \ |
| # Existing files and directories ownership should not be modified |
| && 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 \ |
| && 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 \ |
| && 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 \ |
| # But new files and directories should maintain their ownership |
| && 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 \ |
| && 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 |
| |
| |
| # Copy files from the source stage and chown them. |
| FROM test_base AS copy_from_chowned |
| COPY --from=source --chown=300:400 /file . |
| # Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it |
| COPY --from=source --chown=300:400 /dir /dir |
| # Copying to an existing target directory copies the _contents_ of the source directory into it |
| COPY --from=source --chown=300:400 /dir/. /existingdir |
| |
| 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 \ |
| && 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 \ |
| && 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 \ |
| && 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 \ |
| # Existing files and directories ownership should not be modified |
| && 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 \ |
| && 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 \ |
| && 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 \ |
| # But new files and directories should be chowned |
| && 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 \ |
| && 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 |