У меня есть 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?
Пробовали ли вы добавить исходную команду для активации среды 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"]
Спасибо @DavidMaze, это имеет смысл. Я обновил свой ответ
(Большинство способов запуска чего-либо в Docker не считывают точечные файлы оболочки, такие как
.bashrc
, но если достаточно добавить среду Conda в$PATH
, то строкаENV PATH ...
должна работать; этого достаточно для обычных виртуальных сред Python.)