我正在使用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" ]
答案 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拥有,但由其他用户,以提高安全性,以防止意外修改应用程序文件。)