在Docker撰写路径中使用多个环境变量

时间:2019-05-11 21:45:14

标签: docker docker-compose

我有以下撰写文件:

services:
  myproject:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=44308
      - PROJECT_NAME=MyProject
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/Turma/${PROJECT_NAME}/Logs:/var/logs/${PROJECT_NAME}

在线:

      - ${APPDATA}/Turma/${PROJECT_NAME}/Logs:/var/logs/${PROJECT_NAME}

它识别${APPDATA},但对于${PROJECT_NAME},它使用文字字符串而不是环境变量值。

有没有办法使这项工作有效,以便在路径中使用实际的项目名称?

1 个答案:

答案 0 :(得分:1)

据我所知,您以后将无法在同一撰写文件中引用在撰写文件中定义的env变量并对其进行解释。您可以对$ APPDATA进行定义,因为它是在主机环境中设置的,而不是在撰写文件中设置的。

我同时使用了env变量和带有2.3和3的.env文件进行了测试,但都没有起作用。

我建议将撰写文件包装在运行脚本中,您可以在其中设置主机外壳程序中所需的变量,以便可以正确解释这些变量。如果您使用ansible,jenkins等标准工具进行部署,那么它们都可以为您设置变量。看起来可能如下所示:

#!/bin/bash
export PROJECT_NAME=foo
docker-compose up -d
unset PROJECT_NAME

尽管它可能不适用于创建卷,但是如果您只需要变量在容器运行时执行某项操作(例如设置另一个环境变量),则也可以将其放入入口点脚本中。