Как использовать docker-compose для развертывания в рабочей среде с использованием env_file на сервере?

Как использовать docker-compose для развертывания в рабочей среде с использованием env_file на сервере?

Возьмем следующий упрощенный пример:

services:
  app:
    image: alpine
    env_file: config.env
    entrypoint:
      - /bin/sh
      - -c
      - 'echo "Var is: $$MY_VAR"'

У меня config.envлокально с моими локальными настройками разработки и config.envна сервере с производственными настройками.

Когда я использую , он использует мой локальный config.env вместо того, что на сервере. Я бы предпочел не хранить конфигурацию, специфичную для среды, в своем репозитории, однако все методы, рекомендуемые в документации Docker, включают создание отдельных файлов или файлов на той же машине, на которой вы используете .docker-compose -H [email protected] up --build -d.yml.envdocker-compose

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

решение1

В конце концов я решил создать собственный скрипт развертывания, который копирует файлы docker-compose на сервер и использует файл среды на сервере:

scp docker-compose.yml $USER@$HOST:/tmp/
deploy_cmd="export \$(grep -v '#.*' \"$REMOTE_ENV_FILE\" | xargs)";
deploy_cmd="$deploy_cmd && docker stack deploy -c /tmp/docker-compose.yml my-project";
echo "Deploying to $USER@$HOST"
ssh -qA "$USER@$HOST" "$deploy_cmd" || return 1;

Связанный контент