我对 Docker 比较陌生,目前正在构建一个多容器 dockerized azure web 应用程序(在烧瓶中)。但是,我在秘密管理方面遇到了一些困难。我已经成功构建了一个通过环境变量存储应用程序机密的版本。但根据最近的一些阅读,我注意到这不是一个好主意。我一直在尝试更新我的应用程序以使用 Docker Secrets,但没有运气。
我已经根据这篇文章成功创建了秘密:
您如何使用 docker-compose v3.1 管理秘密值?
我已经部署了堆栈并验证了秘密在 /run/secrets/ 中的两个容器中都可用。但是,当我在 azure 中运行应用程序时出现错误。
以下是我在 azure 中启动应用程序所采取的步骤。
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 web 应用程序以提取最新图像
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
但是,当我在 azure 中运行应用程序时,我得到:
没有这样的文件或目录:'/run/secrets/ my_external_secret
我可以将外壳附加到容器并成功运行:
python
open('/run/secrets/*my_external_secret*', 'r').read().strip()
但是,当 webapp 执行上述行时,它会失败并出现无文件或目录错误。任何帮助将不胜感激。