Почему я должен быть в режиме Swarm, чтобы использовать секреты Docker? - PullRequest
0 голосов
/ 02 октября 2018

Я играю с изображением докера из одного контейнера.Я хотел бы хранить свой пароль БД в качестве секрета, не используя compose (имея пробники с этим и Gradle на данный момент).Я думал, что смогу использовать секреты даже без компоновки, но когда я пытаюсь получить, я получаю ...

$ echo "helloSecret" | docker secret create helloS -

Ошибка ответа от демона: Этот узел не является менеджером роя.Используйте «docker swarm init» или «docker swarm join», чтобы подключить этот узел к рою и попробуйте снова.

Почему мне нужно использовать режим роя только для использования секретов?Почему я не могу использовать их без кластера?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вам нужно запустить режим роя для секретов, потому что так Docker реализовал секреты.Ценность секретов состоит в том, что рабочие никогда не записывают секрет на диск, секрет создается по необходимости (другие работники не получают секрет, пока там не запланировано задание), а менеджеры шифруют этот секрет на диске.Для хранения секрета в диспетчере используется база данных raft.

Вы можете легко развернуть кластер роя с одним узлом с помощью команды docker swarm init.Оттуда docker-compose up изменяется на docker stack deploy -c docker-compose.yml $stack_name.


Секреты и конфиги в режиме роя обеспечивают замену для монтирования отдельных файловых томов в контейнеры для конфигурации.Поэтому без режима роя на одном узле вы всегда можете сделать следующее определение:

version: '2'
services:
  app:
    image: myapp:latest
    volumes:
    - ./secrets:/run/secrets:ro

Или вы можете слегка отделить секреты от своего приложения, загрузив эти секреты в именованный том.Для этого вы можете сделать что-то вроде:

tar -cC ./secrets . | docker run -v secrets:/secrets busybox tar -xC /secrets

И затем смонтировать этот именованный том:

version: '2'
volumes:
  secrets:
    external: true
services:
  app:
    image: myapp:latest
    volumes:
    - secrets:/run/secrets:ro
0 голосов
/ 31 января 2019

Ознакомьтесь с этим ответом: https://serverfault.com/a/936262, предоставленным пользователем sel-en-ium: -

Вы можете использовать секреты, если используете файл композиции. (Вам не нужно запускать рой).

Вы используете файл compose с docker-compose : в докере-compose есть документация для "секретов".yml file .

Я перешел на docker-compose, потому что хотел использовать секреты.Я счастлив, что сделал, это кажется намного более чистым.Каждый сервис отображается в контейнер.И если вы когда-нибудь захотите переключиться на запуск роя, вы в основном уже там.

К сожалению, секреты не загружаются в среду контейнера, они монтируются в / run / secrets /

...