docker - 在 docker compose 路径中使用多个环境变量

标签 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} 它使用文字字符串而不是环境变量值。

有没有办法让这个工作在路径中使用实际的项目名称?

最佳答案

据我所知,您不能稍后在同一撰写文件中引用撰写文件中定义的 env 变量并解释它们。您对 $APPDATA 的定义有效,因为它是在主机环境中设置的,而不是在撰写文件中设置的。

我在 compose 2.3 和 3 中使用 env 变量和 .env 文件进行了测试,但均无效。

我建议将您的撰写文件包装在一个运行脚本中,您可以在其中设置主机 shell 中所需的变量,这样您就可以正确解释这些变量。如果您使用标准工具(如 ansible、jenkins 等)进行部署,这些都可以为您设置变量。这可能类似于以下内容:

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

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

关于docker - 在 docker compose 路径中使用多个环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094501/

相关文章:

docker - Docker Swarm 如何实现卷共享?

python - 导入错误 : The _imagingft C module is not installed in alpine-docker

docker - Docker run -v将卷从Windows主机链接到linux容器

docker - 使用 spark-on-k8s-operator 在 Kubernetes 上运行的 Pyspark 的依赖性问题

python - 使用远程 Docker 机器运行/调试 Pycharm Python 脚本

node.js - 域在主机上解析,但不在 docker 容器内解析

django - 无法在 django 应用程序中使用 docker 运行 celery 和 celerybeat(无法加载 celery 应用程序)

python - 无法连接到基于postgres的容器

docker-compose 不会使用我的命名卷

symfony - Docker-compose自动安装wkhtmltopdf