Я относительно новичок в Docker и в настоящее время создаю многоконтейнерное dockerized веб-приложение на Azure (во флаконе). Однако у меня возникают некоторые трудности с секретным менеджментом. Я успешно создал версию, в которой секреты приложений хранились через переменные среды. Но, основываясь на недавнем чтении, я обратил внимание на то, что это не очень хорошая идея. Я пытался обновить свое приложение, чтобы использовать Docker Secrets, но безуспешно.
Я успешно создал секреты на основе этого поста:
как управлять секретными значениями с помощью docker-compose v3.1?
Я развернул стек и убедился, что секреты доступны в обоих контейнерах в / run / secrets /. Однако когда я запускаю приложение в лазурном режиме, я получаю сообщение об ошибке.
Вот шаги, которые я предпринял для запуска приложения в лазурном цвете.
docker swarm init --advertise-addr XXXXXX
$ echo "This is an external secret" | docker secret create my_external_secret
docker-compose build
docker push
docker stack deploy -c *path-to*/docker-compose.yml webapp
Затем я перезапущу веб-приложение Azure, чтобы получить последние изображения.
Базовая структура docker-compose представлена ниже.
version: '3.1'
services:
webapp:
build: .
secrets:
- my_external_secret
image: some_azure_registry/flask_site:latest
celery:
build: .
command: celery worker -A tasks.celery --loglevel=INFO -P gevent
secrets:
- my_external_secret
image: some_azure_registry.azurecr.io/flask_site_celery:latest
secrets: # top level secrets block
- my_external_secret
external: true
Однако, когда я запускаю приложение в лазурном цвете, я получаю:
Нет такого файла или каталога: '/ run / secrets / my_external_secret
Я могу прикрепить оболочку к контейнеру и успешно запустить:
python
open('/run/secrets/*my_external_secret*', 'r').read().strip()
Но когда указанная выше строка выполняется веб-приложением, происходит сбой с ошибкой отсутствия файла или каталога. Любая помощь будет принята с благодарностью.