Tengo el siguiente archivo de composición:
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}En la línea:
- ${APPDATA}/Turma/${PROJECT_NAME}/Logs:/var/logs/${PROJECT_NAME} Reconoce ${APPDATA} pero para ${PROJECT_NAME} usa la cadena literal, no el valor de la variable de entorno.
¿Hay alguna manera de hacer que esto funcione para que el nombre real del proyecto se use en la ruta?
Hasta donde yo sé, no puede hacer referencia a sus variables env definidas dentro del archivo de redacción más adelante en el mismo archivo de redacción y hacer que se interpreten. Su definición de $APPDATA funciona ya que está configurada en el entorno del host, no en el archivo de redacción.
Probé ambos usando la variable env y un archivo .env con compose 2.3 y 3, y ninguno funcionó.
Recomiendo envolver su archivo de redacción en un script de ejecución donde puede configurar las variables necesarias en su shell de host, para que pueda interpretarlas correctamente. Si está implementando con una herramienta estándar como ansible, jenkins, etc., todos pueden establecer variables para usted. Esto puede parecerse a lo siguiente:
#!/bin/bash export PROJECT_NAME=foo docker-compose up -d unset PROJECT_NAMEAunque es posible que no funcione para crear volúmenes, si solo necesita que la variable haga algo durante el tiempo de ejecución del contenedor (como configurar otra variable de entorno), también se puede colocar en un script de punto de entrada.