Как загрузить содержимое файла в переменную среды в dockerfile?

#docker #docker-compose #dockerfile

Вопрос:

У меня есть ограничения, перечисленные в файле требований для установки python, я совсем новичок в docker, поэтому я не уверен, рекомендуется ли этот сценарий :

  • Копирование custom-constraints-3.6.txt в контейнер
  • Используйте ENV для хранения содержимого этого файла в переменной PYTHON_DEPS (как бы я это сделал?)
  • используйте переменную, например RUN pip install apache-airflow[gcp]==1.10.12 --constraint ${PYTHON_DEPS}

Как я могу скопировать и использовать вышеупомянутые ограничения в моем файле dockerfile?

Ответ №1:

Вы уверены, что хотите, чтобы содержимое файла хранилось в переменной среды? Из моего чтения следует, --constraint что опция ожидает получения пути к файлу.

Предполагая, что вы собираетесь передать путь к файлу в качестве --constraint опции, вы можете использовать что-то вроде следующего:

 FROM image

# Copy the constraints-3.6.txt file into the container
COPY custom-constraints-3.6.txt .

# Use the constraints file which was copied by the previous instruction into the container
RUN pip install apache-airflow[gcp]==1.10.12 --constraint custom-constraints-3.6.txt
 

Если вы хотите прочитать содержимое файла в переменную среды, возможно, попробуйте что-то вроде.

 FROM image

# Copy the constraints-3.6.txt file into the container
COPY custom-constraints-3.6.txt .

# Set the PYTHON_DEPS environment variable to the contents of the file
RUN export PYTHON_DEPS="$(cat custom-constraints-3.6.txt)"
 

РЕДАКТИРОВАТЬ: Похоже, что второй вариант, передающий параметр —constraint что-либо, кроме пути к файлу, не является жизнеспособным способом передачи ограничений в pip. Так что верен только первый метод.

Комментарии:

1. Спасибо! Первый метод сработал, но мне любопытно, как заставить работать и второй. Кажется, я делаю что-то не так, RUN pip install apache-airflow[gcp]==1.10.12 --constraint ${PYTHON_DEPS} потому что я продолжаю получать [8/8] RUN pip install apache-airflow[gcp]==1.10.12 --constraint "${PYTHON_DEPS}": [Errno 2] No such file or directory: '' . Я также попробовал {PYTHON_DEPS} (без двойных кавычек). Что я делаю не так?

2. Похоже, что второй вариант, передающий --constraint опцию что-либо, кроме пути к файлу, не является жизнеспособным способом передачи ограничений pip.

3. Спасибо 🙂 хотя мне непонятно, почему он пытается найти '' вместо списка зависимостей python, загруженных из файла.