将 docker 机密传递给 Azure Web 应用时出错 'No such file or directory: '/run/secrets/'

Error passing docker secrets to azure web app 'No such file or directory: '/run/secrets/'

我对 Docker 比较陌生,目前正在构建一个多容器 dockerized azure web 应用程序(在烧瓶中)。但是,我在秘密管理方面遇到了一些困难。我已经成功构建了一个通过环境变量存储应用程序机密的版本。但根据最近的一些阅读,我注意到这不是一个好主意。我一直在尝试更新我的应用程序以使用 Docker Secrets 但没有成功。

我已经成功创建了基于此的秘密 post:

我已经部署了堆栈并验证了秘密在 /run/secrets/ 中的两个容器中都可用。但是,当我 运行 天蓝色的应用程序时,出现错误。

以下是我在 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

但是,当我 运行 天蓝色的应用程序时,我得到:

没有这样的文件或目录:'/run/secrets/my_external_secret

我可以将 shell 附加到容器并成功 运行:

python
open('/run/secrets/*my_external_secret*', 'r').read().strip()

但是当上面的行被 webapp 执行时,它失败了,没有文件或目录错误。任何帮助将不胜感激。

不幸的是,docker-compose 顶层的秘密在 Azure Web App for Container 中不受支持。往下看:

Supported options

  • command
  • entrypoint
  • environment
  • image
  • ports
  • restart
  • services
  • volumes

Unsupported options

  • build (not allowed)
  • depends_on (ignored)
  • networks (ignored)
  • secrets (ignored)
  • ports other than 80 and 8080 (ignored)

有关详细信息,请参阅 Docker Compose options