Docker 运行 带有 Exec 形式的挂载秘密的指令

Docker RUN Instruction with a Mounted Secret in Exec Form

Dockerfile 中的 RUN 指令的正确语法是什么,它需要以 exec 形式安装秘密?

换句话说,如果 Dockerfile 看起来像:

FROM node:fermium-alpine

# . . .

RUN --mount=type=secret,id=npmrc yarn build:production

# . . .

上面的RUN指令如何从shell形式转换为exec形式?官方文档中好像没有例子here.

FROM node:fermium-alpine


WORKDIR /usr/src/app

# . . .

RUN --mount=type=secret,id=npmrc,dst=/usr/src/app/.npmrc ["/usr/local/bin/yarn", \
                                                          "build:production"]

# . . .

:

  • --mount 标志保留在其右侧的 JSON 数组之外
  • dst=. . . 已添加到上面的 --mount 标志以确保 .npmrc 不仅保存为点文件,而且保存在 WORKDIR 以便 yarn 可以在 build
  • 期间使用它
  • RUN 指令在 exec 形式的 --mount= . . .,dst=. . . 中可能会变得冗长;使用 \Dockerfile 中拆分长行(取自 Dockerfile 最佳实践 here
  • 为了安全起见,由于shell形式在这里使用而不是,所以yarn 可执行文件已替换为 node:fermium-alpine 图像
  • 的绝对路径 /usr/local/bin/yarn