似乎是一个基本问题,但到目前为止找不到任何答案..
在Dockerfile中使用ADD / COPY并在linux上运行镜像时,镜像中复制的文件的默认文件权限是644。这个文件的所有者似乎是'root'
但是,在运行映像时,非 root 用户启动容器,因此以 644 权限复制的任何文件都无法执行此复制/添加的文件,并且如果该文件在 ENTRYPOINT 处执行,则它无法启动并出现权限被拒绝错误。
我在其中一篇文章中读到 Docker 1.17.0+ 之后的 COPY/ADD 允许 chown 但在我的情况下,我不知道谁将成为非 root 用户,因此我无法将权限设置为该用户。
我还看到了另一种将文件添加/复制到不同位置并使用 RUN 将它们从临时位置复制到实际文件夹的方法,如下所示。但是这种方法不起作用,因为最终图像在 /otp/scm 中没有文件
#Installing Bitbucket and setting variables
WORKDIR /tmp
ADD atlassian-bitbucket-${BITBUCKET_VERSION}.tar.gz .
COPY bbconfigupdater.sh .
#Copying Entrypoint script which will get executed when container starts
WORKDIR /tmp
COPY entrypoint.sh .
RUN ls -lrth /tmp
WORKDIR /opt/scm
RUN pwd && cp /tmp/bbconfigupdater.sh /opt/scm \
&& cp /tmp/entrypoint.sh /opt/scm \
&& cp -r /tmp/atlassian-bitbucket-${BITBUCKET_VERSION} /opt/scm \
&& chgrp …
Run Code Online (Sandbox Code Playgroud)