Несколько файлов для создания докеров с указанным env_file

Я работаю над проектом, в котором использую докер для создания базовой конфигурации и ее расширения. Мой базовый файл docker-compose.yml имеет links, поэтому я не могу использовать параметр extends в расширенном файле компоновки. Вместо этого я указываю несколько файлов docker-compose инструменту docker-compose.

Это работает хорошо, за исключением того, что кажется, что путь к файлу .env всегда относится к первому указанному файлу docker-compose.yml, что нарушает мою предполагаемую функциональность.

Пример:

docker-compose.yml (находится в общем месте, скажем, ~/base-app)

web:
  build: .
  volumes:
    - .:/usr/src/app
  ports:
    - "80:3000"
  links:
    - redis
redis:
  image: redis:latest
  ports:
    - "6379:6379"

Теперь в дочернем приложении я хотел бы указать command и env_file:

docker-compose.override.yml

web:
  environment:
    NODE_ENV: development
  env_file: .env
  command: node server.js

Когда я запускаю эту настройку, я бы использовал следующую команду:

docker-compose -f ~/base-app/docker-compose.yml -f docker-compose.override.yml up

Это работает хорошо, пока я не указываю env_file. Но с указанным env_file я получу ошибку вроде:

ERROR: Couldn't find env file: ~/base-app/.env

При чтении docker-compose говорится, что путь к файлу env относительно файла docker-compose при использовании флага -f.

Я что-то пропустил, или это баг? Каким будет чистый способ использования файла .env относительно файла переопределения docker-compose?


person Jesse    schedule 12.12.2015    source источник
comment
При создании нескольких файлов компоновки каждый файл рассматривается как неполный фрагмент, поэтому пути указываются относительно базы. Я не думаю, что есть какой-либо способ сделать это относительно переопределения, если они находятся в разных каталогах.   -  person dnephin    schedule 14.12.2015


Ответы (1)


Лично то, что сработало для меня, и я очень рад, что у меня есть пустой файл компоновки докеров в корне всех моих проектов, между которыми мне нужно сделать перекрестную ссылку, и я всегда устанавливаю это как первый -f во всех командах компоновки и изменил все мои файлы компоновки, чтобы использовать относительные пути от корня моего решения/источника, где находится первый файл компоновки.

/src <- root
/src/docker-compose.yml <- empty docker-compose file only specifying version
/src/api/docker-compose.yml <- docker-compose file using paths relative from /src/
/src/web/docker-compose.yml <- docker-compose file using paths relative from /src/

Затем у меня есть несколько файлов пакетных/powershell, которые вызывают docker-compose, например:

/** docker-compose-re-up.bat **/
docker-compose -f ../docker-compose.yml -f docker-compose.yml down
docker-compose -f ../docker-compose.yml -f docker-compose.yml build
docker-compose -f ../docker-compose.yml -f docker-compose.yml up -d
person Michal Ciechan    schedule 05.04.2019