Linux Alpine 中的命令docker 图片+755 无效模式

Linux commands in Alpine docker image +755 invalid mode

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

我 运行 使用 运行 命令之一 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" ]

各种基于 Alpine 的 Docker 图像使用称为 BusyBox, which tends to only implement the functionality required in standard utilities and no more. In particular, the POSIX.1 definition of chmod 的最小工具集指定(强调我的):

The mode operand shall be either a symbolic_mode expression or a non-negative octal integer.

所以按照标准,既可以用+rwx的形式来加位,也可以用八进制的0755形式来指定一个权限,但不能把两者结合起来。

在 Docker 图像的上下文中,您通常会处理一个非常固定的文件系统布局,并且无论如何您都知道您想要的权限是什么;你应该可以 运行

RUN chmod 0755 /home/node/app/entrypoint.sh

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

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