以 root 用户身份在 Dockerfile 下载 jar 中添加命令

ADD command in Dockerfile download jars as root user

我在 docker 构建我的 docker 图像期间,下载的 jar 包不能被定义的用户使用,因为它们具有 root 专有
奇怪的是我把 USER 放在下载所有 jars 文件之前,所以我认为这个命令是作为 USER 65534 而不是 root 执行的。

    FROM myimage:1.0
    
    USER 65534
    
    ADD [ \
    "https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.1/scala-library-2.13.1.jar", \
    "https://repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.13/2.6.5/akka-actor_2.13-2.6.5.jar", \
    "https://repo1.maven.org/maven2/com/typesafe/akka/akka-osgi_2.13/2.6.5/akka-osgi_2.13-2.6.5.jar", \
    "https://repo1.maven.org/maven2/com/typesafe/akka/akka-slf4j_2.13/2.6.5/akka-slf4j_2.13-2.6.5.jar", \
    "https://repo1.maven.org/maven2/com/typesafe/akka/akka-stream_2.13/2.6.5/akka-stream_2.13-2.6.5.jar",  \"
/tmp/myfolder/lib/" ]

然后查看容器内部我可以看到这些包是 root 并且不能从定义的用户使用。

 ls -alt 
-rw------- 1 root root 2433561 Apr 30 09:09 akka-remote_2.13-2.6.5.jar
-rw------- 1 root root 4665057 Apr 30 09:06 akka-stream_2.13-2.6.5.jar
-rw------- 1 root root   17078 Apr 30 09:05 akka-slf4j_2.13-2.6.5.jar
-rw------- 1 root root   25253 Apr 30 09:04 akka-osgi_2.13-2.6.5.jar
-rw------- 1 root root 3598880 Apr 30 09:02 akka-actor_2.13-2.6.5.jar

可能是什么问题?

USER 不影响 ADD 或 COPY,因此 Docker 向这些命令添加了 chown 标志。您在此处有更多信息 https://docs.docker.com/engine/reference/builder/#add

因此您可以在 ADD 或 COPY 期间执行类似的操作来更改所有权。

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

同样来自 USER https://docs.docker.com/engine/reference/builder/#user:

的文档

The USER instruction sets the user name (or UID) and optionally the user group (or GID) to use when running the image and for any RUN, CMD and ENTRYPOINT instructions that follow it in the Dockerfile.

因此 USER 仅限于 运行、CMD 和 ENTRYPOINT 指令。