Активация среды 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?


50
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"]