Активация среды conda при запуске контейнера докеров

У меня есть Java-приложение, и оно использует пакеты conda для некоторых задач. Поэтому мне нужно активировать среду conda при запуске контейнера докера. Я попробовал следующее в своем файле докеров:

ENTRYPOINT ["/bin/bash", "-c", "source /opt/conda/bin/activate myenv && java -jar app.jar"]
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "java", "-jar", "app.jar"]

Но ничего из этого не работает, и мне приходится вручную активировать контейнер внутри контейнера.

Как правильно это сделать в Dockerfile?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пробовали ли вы добавить исходную команду для активации среды Conda в файле .bashrc (или другой конфигурации rc других оболочек), используя RUN и добавив переменную PATH с путем к контейнеру среды /opt/conda/envs/myenv/bin и запустив команду Java в ENTRYPOINT

RUN echo "source /opt/conda/bin/activate myenv" > ~/.bashrc
ENV PATH /opt/conda/envs/myenv/bin:$PATH
ENTRYPOINT ["java", "-jar", "app.jar"]

Если ENTRYPOINT не сработало, вы можете попробовать вместо этого использовать исходную команду ENTRYPOINT.

RUN echo "source /opt/conda/bin/activate myenv" > ~/.bashrc
ENV PATH /opt/conda/envs/myenv/bin:$PATH
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "java", "-jar", "app.jar"]

Обновлено: по предложению @DavidMaze, я думаю, вы также можете удалить команду RUN в Dockerfile, чтобы избежать избыточности, поскольку .bashrc поступает только тогда, когда оболочка контейнера находится в интерактивном режиме.

ENV PATH /opt/conda/envs/myenv/bin:$PATH
ENTRYPOINT ["java", "-jar", "app.jar"]

(Большинство способов запуска чего-либо в Docker не считывают точечные файлы оболочки, такие как .bashrc, но если достаточно добавить среду Conda в $PATH, то строка ENV PATH ... должна работать; этого достаточно для обычных виртуальных сред Python.)

David Maze 27.08.2024 13:11

Спасибо @DavidMaze, это имеет смысл. Я обновил свой ответ

tax evader 28.08.2024 05:21

Другие вопросы по теме