Создать каталог в Dockerfile, используя переменную ENV - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь использовать docker и docker-compose для создания набора контейнеров с некоторыми настроенными параметрами с использованием переменных среды - например, я хочу смонтировать каталог в определенном месте в контейнере,Это конкретное расположение хранится в переменной окружения и создается в Dockerfile с помощью такой команды:

RUN mkdir $custom_location

Я сохраняю параметры в файле .env, который заполняет файл docker-compose.

Когда контейнеры запущены, с помощью команды printenv я вижу, что передача переменных env сработала, и я могу вручную запустить команду mkdir $custom_location, но команда не была успешной во время процесса сборки dockerfile.

Сводная версия Dockerfile выглядит следующим образом:

FROM python:3.6.5 as my_base
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH

Сводная версия docker-compose.yml выглядит следующим образом:

  service:
    environment:
      - CUSTOM_PATH=${CUSTOM_PATH}
    build: ./Docker

Ошибка Iполучаю вот так:

Шаг 20/20: ЗАПУСК mkdir $ CUSTOM_PATH ---> Запуск в 437aa3f09dbb mkdir: отсутствует операнд Попробуйте «mkdir --help» для получения дополнительной информации.Команда '/ bin / sh -c mkdir $ CUSTOM_PATH' вернула ненулевой код: 1

Почему это так?

Переменные ENV успешно находятся в работающем контейнере,Используя printenv я их вижу.

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете успешно использовать ARG с ENV в вашем Dockerfile.См. документы по этому :

. Вы можете использовать инструкцию ARG или ENV, чтобы указать переменные, доступные для инструкции RUN.Переменные среды, определенные с помощью инструкции ENV, всегда переопределяют инструкцию ARG с тем же именем.Рассмотрим это Dockerfile с инструкцией ENV и ARG.

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER

Итак, в вашем случае это должно быть

FROM python:3.6.5 as my_base
ARG CUSTOM_PATH=<some default path if you wish>
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH

После этого вы можете построитьизображение с docker build --build-arg CUSTOM_PATH=/var/log/whatever . и оно должно работать.

...