Azure Docker compose 因环境部分而失败

标签 azure docker-compose azure-web-app-service azure-container-service

我有一个在 Azure 中运行良好的 docker-compose.yml 脚本。但是当我添加带有两个变量的环境部分时,它会失败并出现以下错误:

2018-08-24 10:29:30.214 ERROR - Exception in multi-container config parsing: System.InvalidCastException: Specified cast is not valid.  
 at LWAS.Kube.ComposeFileParser.ParseContainer (System.Collections.Generic.KeyValuePair`2[TKey,TValue] service) [0x00152] in <029f376c1c6a4bb79892c2f60333c2d8>:0
 at LWAS.Kube.ComposeFileParser.ParseFile (System.String composeYaml) [0x000d2] in <029f376c1c6a4bb79892c2f60333c2d8>:0
 at LWAS.Kube.PodSpec.LoadSpecFromComposeYamlFile (System.String composeFile) [0x00000] in <029f376c1c6a4bb79892c2f60333c2d8>:0
 at LWAS.SiteStartInfoRepository.SetupPodSpecForMultiContainerApp (Microsoft.Web.Hosting.StartSiteContext ctx, LWAS.LinuxSiteStartInfo startInfo) [0x0000f] in <029f376c1c6a4bb79892c2f60333c2d8>:0
2018-08-24 10:29:30.215 ERROR - Start multi-container app failed

docker-compose.yml 文件的简短内容为:

version: '3.3'

services:
  application:
    image: myregistry.azurecr.io/application:latest
    volumes:
      - application_data:/usr/local/application/data

  proxy:
    image: myregistry.azurecr.io/proxy:latest
    depends_on:
      - application
    environment:
      - NGINX_HOST=myapplication.azurewebsites.net
      - NGINX_PORT=80
    ports:
      - "80:80"

volumes:
  application_data:

我尝试过:

  1. 只有一个变量
  2. 在值周围使用引号,即 NGINX_PORT="80"
  3. 将整个变量定义放在引号中,即 "NGINX_PORT=80"
  4. 使用驼峰式大小写重命名变量,即 nginxPort=80
  5. 上下移动环境部分

没有任何帮助 - 仍然是相同的错误消息。

但是应该可以通过 Docker compose 在 Azure 中使用环境变量,如下所示:https://learn.microsoft.com/en-us/dotnet/standard/microservices-architecture/multi-container-microservice-net-applications/multi-container-applications-docker-compose

注意:它可以使用docker-compose命令在本地运行,没有任何问题。所以这一定是 Azure 的一些特定问题。

我做错了什么?

谢谢

最佳答案

尝试:
- 删除环境值前面的破折号
- 将所有环境值的“=”更改为“:”

version: '3.3'

services:
  application:
    image: myregistry.azurecr.io/application:latest
    volumes:
      - application_data:/usr/local/application/data

  proxy:
    image: myregistry.azurecr.io/proxy:latest
    depends_on:
      - application
    environment:
      NGINX_HOST: myapplication.azurewebsites.net
      NGINX_PORT: 80
    ports:
      - "80:80"

volumes:
  application_data:

来自 Microsoft 的 yml 示例:

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

来源: https://learn.microsoft.com/en-us/azure/app-service/containers/tutorial-multi-container-app

关于Azure Docker compose 因环境部分而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004623/

相关文章:

Django Web 应用程序已成功部署在 Azure 应用服务 Linux 上,但只能看到 Azure 默认页面

azure - 在 Windows Azure 网站上运行的 ASP.Net API

sql-server - 将 SQL 数据库上传到 Azure

azure - Azure VM 临时存储的临时性如何?

python - 容器化 Azure 函数 - 从 Dockerfile 更改 AzureWebJobsScriptRoot 变量

node.js - 找不到在 docker compose 环境中运行的 Node js 应用程序的模块

Dockerfile 未在 RUN composer install 命令中使用缓存

python - 如何在启动时在docker容器上运行多个命令?

azure - 如何忽略 Azure API Manager validate-jwt 策略中的特定 URL

azure - 作为 Azure 门户中的全局管理员,我无法配置持续交付预览