将docker机密传递到azure Web应用程序时出错'没有这样的文件或目录:'/ run / secrets /'

时间:2019-08-16 18:13:46

标签: azure docker-compose azure-web-sites docker-swarm docker-secrets

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

我已经根据这篇文章成功创建了秘密:

how do you manage secret values with 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()

但是,当上述行由webapp执行时,它将失败,并出现no file or directory错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

  

支持的选项

     
      
  • 命令
  •   
  • 入口点
  •   
  • 环境
  •   
  • 图片
  •   
  • 端口
  •   
  • 重新启动
  •   
  • 服务
  •   
  • 音量
  •   
     

不支持的选项

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

有关更多详细信息,请参见Docker Compose options