Можно ли использовать файл. env для отдельного файла Dockerfile?
Я работаю над простым образом Docker, который имеет большое количество переменных окружения. Вы можете импортировать файл переменной окружения, как в docker-compose? Я не могу найти ничего об этом в документации к файлу docker.
Dockerfile
FROM python:3.6
ENV ENV1 9.3
ENV ENV2 9.3.4
...
ADD . /
RUN pip install -r requirements.txt
CMD [ "python", "./manager.py" ]
Я думаю, что хорошим способом перефразировать вопрос было бы: как вы эффективно загружаете несколько переменных окружения в Dockerfile? Если вы не можете загрузить файл, вы не сможете зафиксировать docker файл на github.
3 ответов:
Да, есть несколько способов вы можете сделать это.
Docker Compose
В Docker Compose можно указать переменные окружения в самом файле или указать на внешний env-файл:
Кстати, одна приятная особенность, которая несколько связана с этим, заключается в том, что вы можете использовать несколько файлов Compose, причем каждый последующий добавляет к другому. Поэтому, если выше было определено основание, вы можете сделать это (например, для среды выполнения):# docker-compose.yml version: '2' services: service-name: image: service-app environment: - GREETING=hello env_file: - .env# docker-compose-dev.yml version: '2' services: service-name: environment: - GREETING=goodbyeЗатем вы можете запустить его таким образом:
docker-compose -f docker-compose.yml -f docker-compose-dev.yml upТолько Докер
Чтобы сделать это только в Docker, используйте entrypoint или команду для запуска промежуточного сценария, таким образом:
#Dockerfile .... ENTRYPOINT ["sh", "bin/start.sh"]А затем в вашем стартовом скрипте:
#!/bin/sh source .env python /manager.pyЯ использовал этот связанный ответ в качестве полезной ссылки для себя в прошлом.
Существуют различные options:
https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e-env-env-filedocker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash(вы также можете просто ссылаться на предыдущие переменные
exported, см.USERниже.)Тот, кто отвечает на ваш вопрос об Ан .env файл:
cat env.list # This is a comment VAR1=value1 VAR2=value2 USER docker run --env-file env.list ubuntu env | grep VAR VAR1=value1 VAR2=value2 docker run --env-file env.list ubuntu env | grep USER USER=denisВы также можете загрузить переменные окружения из файла. Этот файл должен использовать синтаксис
variable=value(который устанавливает переменную на заданное значение) илиvariable(который принимает значение значение из локальной среды ) и # для комментариев.Что касается разницы между переменными, необходимыми во время сборки (image) или во время выполнения (container), и как объединить
ENVиARGдля динамических аргументов сборки, вы можете попробовать это:
ARG или ENV, какой из них использовать в этом случае?
Если вам нужны переменные среды выполнения, проще всего создать сценарий запуска, который настраивает среду с помощью нескольких операторов
export, а затем запускает процесс.Если вам нужно время сборки, посмотрите на операторы
ARGиENV. Вам понадобится по одному на переменную.
Comments