在构建 Docker 镜像时,如何将文件 COPY
进镜像中,使得生成的文件归属于非 root 用户?
在构建 Docker 镜像时,如何将文件 COPY
进镜像中,使得生成的文件归属于非 root 用户?
对于版本 v17.09.0-ce 及以上
使用可选标志 --chown=<user>:<group>
与 ADD
或 COPY
命令。
例如:
COPY --chown=<user>:<group> <hostPath> <containerPath>
--chown标志的文档现已发布到主Dockerfile参考页面。
问题34263已被合并,可在v17.09.0-ce版本的发行版中使用。
对于早于v17.09.0-ce的版本
Docker不支持将COPY
命令用于除root以外的用户。您需要在COPY
命令之后更改文件的所有者/权限(chown
/chmod
)。
Dockerfile示例:
from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]
在v17.09.0-ce版本之前,COPY
命令的Dockerfile参考文档中写道:
所有新文件和目录的UID和GID都为0。
历史记录 此功能已通过多个GitHub问题进行跟踪:6119,9943,13600,27303,28499,Issue 30110。
Issue 34263是实现可选标志功能的问题,Issue 467更新了文档。
我是这样做的,而且完美无缺
FROM node:lts-alpine3.17
RUN addgroup app && adduser -S -G app app
RUN mkdir /app && chown app:app /app
USER app
WORKDIR /app
COPY --chown=app:app package*.json .
RUN npm install
COPY --chown=app:app . .
EXPOSE 8090
CMD ["npm","start"]
chown
,占用>300MB)。 - Dirk