Используйте несколько переменных окружения в Docker Compose Path - PullRequest
1 голос
/ 12 мая 2019

У меня есть следующий составной файл:

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 Ответ

1 голос
/ 12 мая 2019

Насколько мне известно, вы не можете ссылаться на свои переменные env, определенные в файле compose позже, в том же файле compose и интерпретировать их.Ваше определение $ APPDATA работает, поскольку оно установлено в среде хоста, а не в файле compose.

Я протестировал оба, используя переменную env и файл .env с compose 2.3 и 3, но ни один из них не работал.

Я рекомендую обернуть ваш составной файл в скрипт запуска, в котором вы можете установить переменные, необходимые в вашей командной оболочке, чтобы вы могли правильно их интерпретировать.Если вы развертываете с помощью стандартного инструмента, такого как ansible, jenkins и т. Д., Все они могут установить переменные для вас.Это может выглядеть следующим образом:

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

Хотя это может не сработать для создания томов, если вам просто нужна переменная для выполнения чего-либо во время выполнения контейнера (например, установка другой переменной среды), это может бытьположить в сценарий входа также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...