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



我正在使用 Node:12 基本映像构建一个 Docker 映像。由于图像尺寸较小,我正在尝试将其切换为使用 Node:12-alpine。我已经在阿尔卑斯山安装了 bash 和阴影,以便能够运行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" ]

各种基于 Alpine 的 Docker 映像使用称为 BusyBox 的最小工具集,该工具集往往只实现标准实用程序中所需的功能,而不再实现。 特别是,POSIX.1 对chmod的定义指定(强调我的):

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

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

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

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

无需安装任何其他软件包。

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

最新更新