在本地构建 docker compose 时如何使用 secret

How to use secrets when building docker compose locally

我最近开始使用 Buildkit 来隐藏一些环境变量,并且在 gha 的产品中效果很好!

我的Docker文件现在是这样的:

# syntax=docker/dockerfile:1.2
...
RUN --mount=type=secret,id=my_secret,uid=1000 \
    MY_SECRET=$(cat /run/secrets/my_secret) \
    && export MY_SECRET

而我的前脸是这样的:

DOCKER_BUILDKIT=1 docker build \
    --secret  id=my_secret,env="MY_SECRET"

当我 运行 在我的 Github 操作中使用它时,它完美地工作。

但是现在,这里的问题 是我尝试在本地构建它的时候。执行 docker-compose build 时失败。当然,因为我没有传递任何秘密,所以我的后端(Docker文件)将无法从 run/secrets/.

读取它

到目前为止,我尝试使用 docker-compose build 完成本地构建:

1.使用 Docker 个秘密:

我基本上试过这样做:

$ docker swarm init
$ echo "my_secret_value" docker secret create my_secret -

我认为保存秘密可以解决问题,但没有用。我仍然收到相同的错误消息:

cat: can't open '/run/secrets/my_secret': No such file or directory

  1. 我也试过像下面这样在我的 docker-compose 文件中传递秘密,但也没有用:
version: '3'
services:
  app:
    build:
      context: "."
      args:
        - "MY_SECRET"
  secrets:
      - my_secret
secrets:
  my_secret:
    external: true
  1. 我也试过将秘密存储在本地文件中,但是没有用,同样的错误:
version: '3'
services:
  app:
    build:
      context: "."
      args:
        - "MY_SECRET"
  secrets:
      - my_secret
secrets:
  my_secret:
    file: ./my_secret.txt
  1. 我也试过做这样的事情 answer 像这样的事情:
args:
    - secret=id=my_secret,src=./my_secret.txt

但还是出现同样的错误:

cat: can't open '/run/secrets/my_secret': No such file or directory

我做错了什么才能成功执行 docker-compose build

我知道我可以轻松使用两个 Docker 文件,一个 Docker 文件在本地构建,一个 Docker 文件在产品中构建,但我只想按原样使用 Buildkit,只需修改我的 docker-compose.yml 文件。

有没有人知道我缺少什么才能从 /run/secrets/ 构建本地阅读?

最近在 v2 中实现了对此的支持。请参阅以下拉取请求。

提供的示例如下所示:

services:
  frontend:
    build: 
      context: .
      secrets:
        - server-certificate
secrets:
  server-certificate:
    file: ./server.cert

所以你很接近,但你必须在构建密钥下添加密钥。

另外请记住,您必须使用 docker compose 而不是 docker-compose,以便使用 docker 客户端中内置的 v2。