【问题标题】:Linux commands in Alpine docker image +755 invalid modeAlpine docker image +755 无效模式下的 Linux 命令
【发布时间】:2019-12-31 01:47:52
【问题描述】:

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

【问题讨论】:

  • +755? + 代表什么?我知道数字是什么,但 + 对我来说是个谜
  • + 表示将此权限添加到文件已有的其他权限中。
  • +w r g u .. 一起使用,但我认为它不适用于数字。检查man
  • @ArnaudClaudel 嗯,很高兴知道。实际上我并没有编写脚本的那部分,它确实适用于 node:12 基础映像(只是不在 Alpine 中)。
  • Alpine 图像使用来自busybox 项目的chmod,这可能与您在其他图像上使用的chmod 不同。 busybox chmod 非常精简,可能无法处理将 + 放在数字权限前面的错误语法。

标签: docker alpine


【解决方案1】:

各种基于 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 拥有但由不同的用户执行,用于额外的安全层,以防止应用程序文件被无意修改。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2017-09-26
    • 2018-03-25
    相关资源
    最近更新 更多