Alpine docker image +755 无效模式下的 Linux 命令

pen*_*ngz 1 docker alpine-linux

我正在使用 Node:12 基础映像构建 Docker 映像。由于图像尺寸较小,我尝试将其切换为使用 Node:12-alpine。我在 Alpine 中安装了 bash 和 Shadow 以便能够运行chmod命令。

我在使用其中一个 RUN 命令时遇到错误RUN chmod +755。错误信息:chmod: invalid mode '+755'

请注意,这适用于 Node:12 基础映像,所以我想我只需要在 Alpine linux 中安装另一个包?谢谢!

FROM node:12.8-alpine

# Create working directory
RUN mkdir -p /home/node/app

# Set working directory
WORKDIR /home/node/app

# Install bash and shadow for permissions chmod commands
RUN apk add --no-cache bash && apk add shadow

# Add `/home/node/app/node_modules/.bin` to $PATH
ENV PATH /home/node/app/node_modules/.bin:$PATH

# Copy code
COPY --chown=node . /home/node/app

# Update umask
RUN chmod +755 /home/node/app/entrypoint.sh && \
    echo 'umask 002' >> /home/node/.profile && \
    echo 'umask 002' >> /home/node/.bashrc && \
    npm install

ENTRYPOINT ["./entrypoint.sh"]

CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 7

各种基于 Alpine 的 Docker 镜像使用一个名为BusyBox的最小工具集,它往往只实现标准实用程序所需的功能,仅此而已。特别是,POSIX.1 的定义指定chmod(强调我的):

模式操作数应为 symbolic_mode表达式或非八进制整数。

因此,根据标准,您可以使用+rwx形式来添加位,也可以使用八进制0755形式来指定权限,但不能将两者结合起来。

在 Docker 镜像的上下文中,您通常要处理相当固定的文件系统布局,并且在任何情况下您都知道您想要的权限是什么;你应该能够跑

RUN chmod 0755 /home/node/app/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

无需安装任何额外的软件包。

(另请注意,Docker 通常不会读取 shell 点文件,因此对 和 的修改.profile无效.bashrc。通常,您确实希望应用程序由 root 拥有,但由不同的用户执行,以获得额外的安全层以防止应用程序文件免遭无意修改。)