I have a java app, and it uses conda packages for some tasks. So my need is to activate a conda env when docker container starts. I have tried following in my docker file:
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"]
But none of these work, and I have to manually activate the env inside container.
What is correct way of doing it in Dockerfile?
Have you tried using adding the source command to activate Conda environment in the .bashrc file (or other rc config of other shells) using RUN and appending the PATH variable with path to environment bin /opt/conda/envs/myenv/bin and run the java command in ENTRYPOINT
RUN echo "source /opt/conda/bin/activate myenv" > ~/.bashrc
ENV PATH /opt/conda/envs/myenv/bin:$PATH
ENTRYPOINT ["java", "-jar", "app.jar"]
If the ENTRYPOINT didn't work, you could try using the original ENTRYPOINT command instead
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"]
Edit: per @DavidMaze's suggestion, I think you can also remove RUN command in the Dockerfile to avoid redundancy as .bashrc is only sourced when container shell is in interactive mode
ENV PATH /opt/conda/envs/myenv/bin:$PATH
ENTRYPOINT ["java", "-jar", "app.jar"]