Вам нужно запустить режим роя для секретов, потому что так 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