Как использовать секреты при локальной сборке docker compose

Недавно я начал использовать Buildkit, чтобы скрыть некоторые переменные env, и это отлично сработало в prod by gha!

Мой Dockerfile теперь выглядит примерно так:

# 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 не получается. Конечно, потому что я не разглашаю никаких секретов, поэтому мой бэкэнд (Dockerfile) не сможет прочитать его из 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. Я также попытался передать секрет в моем файле создания докеров, как показано ниже, но это тоже не сработало:
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. Я также пытался сделать что-то вроде этого отвечать примерно так:
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?

Я знаю, что могу легко использовать два Dockerfile, Dockerfile для локальной сборки и Dockerfile для сборки в prod, но я просто хочу использовать Buildkit как есть, только изменив свой файл docker-compose.yml.

Кто-нибудь знает, чего мне не хватает, чтобы иметь возможность локально читать из /run/secrets/?

0
0
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поддержка этого была недавно реализована в v2. См. приведенные ниже запросы на включение.

Предоставленный пример выглядит следующим образом:

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

Итак, вы близки, но вам нужно добавить секретный ключ под ключ сборки.

Также имейте в виду, что вы должны использовать docker compose вместо docker-compose, чтобы использовать v2, встроенный в клиент докера.

Эй, я на самом деле также попробовал это из версии 3.8 и не работает, получил ошибку: services.app.build contains unsupported option: 'secrets' Что мне нужно сделать, чтобы это заработало?

Jonatan Lavado 17.05.2022 23:43

Мой рабочий стол докера говорит, что моя версия для компоновки 1.29.2

Jonatan Lavado 17.05.2022 23:46

@JonatanLavado, это функция компоновки v2. Используйте команду сборки docker compose, а не docker-compose, которая является пакетом Python. У меня работает с Docker Compose version v2.5.0

The Fool 17.05.2022 23:48

Я только что обновил свой рабочий стол докера, и, похоже, он работает. Я дам Вам знать. Но небольшой вопрос: знаете ли вы, можно ли передать экспортированную переменную в свойство secrets? Мой секрет сохранен локально с помощью $ export VAR. Есть ли свойство для его определения без использования файла?

Jonatan Lavado 18.05.2022 00:16

Другие вопросы по теме