如何在 docker compose Secret 中使用主目录中的文件?

Mar*_*328 6 node.js docker docker-compose

我正在尝试构建一个包含私有节点包的 docker 容器。我已按照本指南使用密钥安全地引用 npmrc 文件来安装依赖项。当使用这样的命令直接构建图像时,我可以让它工作:docker build --secret id=npm,src=$HOME/.npmrc .但我无法使用 docker compose 让它工作。运行 a 时,docker compose build它的行为就像没有 npmrc 文件,并在尝试下载依赖项时给出 401。

我在下面提供了 Dockerfile 和 docker-compose.yml 的精简版本。

Dockerfile

# syntax = docker/dockerfile:1.2
FROM node:14.17.1

COPY . .

RUN --mount=type=secret,id=npm,target=/root/.npmrc yarn --frozen-lockfile --production

EXPOSE 3000

CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

# syntax = docker/dockerfile:1.2
FROM node:14.17.1

COPY . .

RUN --mount=type=secret,id=npm,target=/root/.npmrc yarn --frozen-lockfile --production

EXPOSE 3000

CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

kre*_*ema 5

docker-compose v2.5.0开始,这是可能的。

Dockerfile:

# syntax=docker/dockerfile:1.2

RUN --mount=type=secret,id=mysecret,target=/root/mysecret cat /root/mysecret
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

services:
  my-app:
    build:
      context: .
      secrets:
        - mysecret

secrets:
  mysecret:
   file: ~/.npmrc
Run Code Online (Sandbox Code Playgroud)

  • 只是想让您知道这解决了我的个人问题。所以虽然这半年多没有积分,但还是帮了别人一把! (3认同)