Rag*_*han 6 containers bitbucket bitbucket-server docker dockerfile
似乎是一个基本问题,但到目前为止找不到任何答案..
在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 -R 0 /opt/ \
&& chmod -R 755 /opt/ \
&& chgrp -R 0 /scm/bitbucket \
&& chmod -R 755 /scm/bitbucket \
&& ls -lrth /opt/scm && ls -lrth /scmdata
Run Code Online (Sandbox Code Playgroud)
感谢您帮助我弄清楚如何使用设置的执行权限将我的入口点脚本复制到所需的路径。
Rom*_*ain 13
Docker CE 20.10--chmod中添加了一个标志ADD和COPY指令。所以你现在可以这样做。
COPY --chmod=0755 entrypoint.sh .
Run Code Online (Sandbox Code Playgroud)
为了能够使用它,您需要启用BuildKit。
COPY --chmod=0755 entrypoint.sh .
Run Code Online (Sandbox Code Playgroud)
注意:目前似乎还没有记录,请参阅此问题。
默认文件权限是您复制文件的构建上下文中的任何文件权限。如果您控制源,那么最好修复那里的权限以避免写时复制操作。否则,如果您不能保证构建映像的系统将在文件上设置执行位,chmod则复制操作后将修复该权限。例如
RUN chmod +x entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
您无需知道谁将运行容器。容器内的用户通常由图像创建者配置(使用USER),不依赖于从 docker 主机运行容器的用户。当用户运行容器时,他们向不跟踪调用用户 ID 的 docker API 发送请求。
我唯一一次看到主机用户问题是您是否有主机卷并希望避免权限问题。如果这是您的情况,我通常以 root 身份启动入口点,运行名为fix-perms的脚本将容器 uid 与主机卷 uid 对齐,然后运行 gosu 以从 root 切换回容器用户。
| 归档时间: |
|
| 查看次数: |
12146 次 |
| 最近记录: |