Intereting Posts
Разрешение отклонено для опции сокета SO_DEBUG внутри докера Docker снова перезагружается и работает Можем ли мы создать группу узлов в рое докеров? Создание treemap размера файлов / папок с `docker diff` Эквивалентная команда для командной строки $ USER IN windows Докер: подключение через SSH к удаленному серверу MySQL Как предоставить пользователю без полномочий root доступ к контейнеру Docker к тому, установленному на хосте разрешение докера для контейнера в / sys / fs / cgroups / devices Docker / Rails – Разрешение запрещено @ dir_s_mkdir Errno :: EACCESS Nginx client_max_body_size не работает в контейнере Docker на AWS Elastic Beanstalk Нам действительно нужны обновления безопасности на изображениях докеров Как запустить HHVM в Docker в качестве демона? Минимальная конфигурация для обратного прокси-сервера Apache в контейнере Docker Ошибка сборки Docker с помощью шаблона Web-пакета vue-cli Как установить пакет pip локально в Dockerfile?

Использовать переменную env для docker-compose в файле Dockerbuild

Имея следующий файл для записи докеров:

db: build: . environment: - MYSQL_ROOT_PASSWORD=password - ENV=test env_file: .env 

Есть ли способ использовать переменные env, объявленные в docker-compose.yml (либо как среда, либо объявленные в env_file) как часть файла Docker, не объявляя их в файле Docker? Что-то вроде этого:

 FROM java:7 ADD ${ENV}/data.xml /data/ CMD ["run.sh"] 

Хотя этот вопрос был задан давно, есть ответ на аналогичный вопрос: перечислите переменные среды из докере-компоновки в контейнер на этапе сборки

В принципе, чтобы использовать переменные во время сборки контейнера, нужно определить переменную в docker-compose.yml :

 build: context: . args: MYSQL_ROOT_PASSWORD: password ENV: test 

и затем ссылаться на него в Dockerfile с помощью ARG :

 ARG MYSQL_ROOT_PASSWORD ARG ENV ADD ${ENV}/data.xml /data/ 

Что касается переменных среды, определенных в файле *.env , я считаю, что они не могут быть переданы контейнеру во время сборки.

Этот подход идет вразрез с теорией «строить один раз, запускать в любом месте» за Docker и большинством подходов DevOps. При таком подходе вам нужно будет создать контейнер для каждой среды, которую вы ожидаете использовать. Поступая таким образом, вы не можете спокойно сказать, работает ли контейнер в среде dev, он будет работать в стадии постановки и производства, так как вы не используете один и тот же контейнер.

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