1

我对 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 执行上述行时,它会失败并出现无文件或目录错误。任何帮助将不胜感激。

4

1 回答 1

0

不幸的是,用于容器的 Azure Web App 不支持 docker-compose 顶层的机密。看看下面:

支持的选项

  • 命令
  • 入口点
  • 环境
  • 图片
  • 港口
  • 重新开始
  • 服务

不支持的选项

  • 构建(不允许)
  • 依赖(忽略)
  • 网络(忽略)
  • 秘密(忽略)
  • 80 和 8080 以外的端口(忽略)

有关更多详细信息,请参阅Docker Compose 选项

于 2019-08-19T08:36:48.790 回答