#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, загруженных из файла.