Можно ли использовать файл. 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.

578   3  

3 ответов:

Да, есть несколько способов вы можете сделать это.

Docker Compose

В Docker Compose можно указать переменные окружения в самом файле или указать на внешний env-файл:

# docker-compose.yml
version: '2'
services:

  service-name:
    image: service-app
    environment:
    - GREETING=hello
    env_file:
    - .env
Кстати, одна приятная особенность, которая несколько связана с этим, заключается в том, что вы можете использовать несколько файлов Compose, причем каждый последующий добавляет к другому. Поэтому, если выше было определено основание, вы можете сделать это (например, для среды выполнения):
# 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-file

docker 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

    Ничего не найдено.