Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`--chown` option of COPY and ADD doesn't allow variables. There exists a workaround?

In a Dockerfile, the common way to copy a directory as a non-root user (e.g $UID 1000) is the following:

COPY --chown=1000:1000 /path/to/host/dir/ /path/to/container/dir

However, I want to use variables instead. For example

ARG USER_ID=1000
ARG GROUP_ID=1000
COPY --chown=${USER_ID}:${GROUP_ID} /path/to/host/dir/ /path/to/container/dir

But this is not possible. There exist a workaround?

Note I know that a possible workaround could be to copy the directory as root and then run chown on the directory (variables works fine with RUN). However, the size of the image will grow just for the use of chown in a separate command.

like image 413
gvgramazio Avatar asked Dec 22 '18 15:12

gvgramazio


1 Answers

You can create a user before running the --chown;

mkdir -p test && cd test
mkdir -p path/to/host/dir/
touch path/to/host/dir/myfile

Create your Dockerfile:

FROM busybox

ARG USER_ID=1000
ARG GROUP_ID=1000

RUN addgroup -g ${GROUP_ID} mygroup \
 && adduser -D myuser -u ${USER_ID} -g myuser -G mygroup -s /bin/sh -h /

COPY --chown=myuser:mygroup /path/to/host/dir/ /path/to/container/dir

Build the image

docker build -t example .

Or build it with a custom UID/GID:

docker build -t example --build-arg USER_ID=1234 --build-arg GROUP_ID=2345 .

And verify that the file was chown'ed

docker run --rm example ls -la /path/to/container/dir

total 8
drwxr-xr-x    2 myuser   mygroup       4096 Dec 22 16:08 .
drwxr-xr-x    3 root     root          4096 Dec 22 16:08 ..
-rw-r--r--    1 myuser   mygroup          0 Dec 22 15:51 myfile

Verify that it has the correct uid/gid:

docker run --rm example ls -lan /path/to/container/dir

total 8
drwxr-xr-x    2 1234     2345          4096 Dec 22 16:08 .
drwxr-xr-x    3 0        0             4096 Dec 22 16:08 ..
-rw-r--r--    1 1234     2345             0 Dec 22 15:51 myfile

Note: there is an open feature-request for adding this functionality: issue #35018 "Allow COPY command's --chown to be dynamically populated via ENV or ARG"

like image 196
thaJeztah Avatar answered Oct 22 '22 13:10

thaJeztah