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

时间:2019-08-26 21:31:31

标签: docker alpine

我正在使用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" ]

1 个答案:

答案 0 :(得分:3)

各种基于Alpine的Docker映像都使用一个称为BusyBox的最小工具集,该工具集往往仅实现标准实用程序所需的功能,而没有更多功能。特别是the POSIX.1 definition of chmod指定(强调我的意思):

  

mode 操作数应为 一个 symbolic_mode 表达式或一个非负八进制整数。

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

在Docker映像的上下文中,通常要处理相当固定的文件系统布局,无论如何,您都知道想要的权限是什么;您应该能够运行

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

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

(还要注意,Docker通常不读取shell点文件,因此对.profile.bashrc的修改无效。通常,您确实希望应用程序由root拥有,但由其他用户,以提高安全性,以防止意外修改应用程序文件。)