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 所有,但由不同的用户执行,以获得额外的安全层,以防止应用程序文件被无意修改。)
我正在使用 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 所有,但由不同的用户执行,以获得额外的安全层,以防止应用程序文件被无意修改。)