【问题标题】:How to activate a conda environment before running Docker commands如何在运行 Docker 命令之前激活 conda 环境
【发布时间】:2019-08-24 23:33:42
【问题描述】:

我正在使用 Dockerfile 创建一个包含 conda 环境 myEnv 的 docker 映像。

我想在使用

运行 docker 映像时
docker run -it myDockerImage

进入环境已经激活的 bash 终端。我知道我们可以将变量和命令传递给docker run,但我希望它能够自动完成。

我尝试将以下变体添加到 Dockerfile 的末尾,但似乎没有任何效果:

CMD ["source /root/miniconda/bin/activate myEnv"]
CMD [".", "/root/miniconda/bin/activate", "myEnv"]
CMD ["source /root/miniconda/bin/activate myEnv; /bin/bash"]

【问题讨论】:

标签: docker anaconda dockerfile conda


【解决方案1】:

在您的 Dockerfile 中使用 ENTRYPOINT 执行此操作。

src/entrypoint.sh

#!/bin/bash

# enable conda for this shell
. /opt/conda/etc/profile.d/conda.sh

# activate the environment
conda activate my_environment

# exec the cmd/command in this process, making it pid 1
exec "$@"

src/Dockerfile

# ...
COPY ./entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

【讨论】:

  • 这个答案看起来不错,但也要考虑这个simpler approach using ENV PATH,它不需要你有一个entryoint.sh 脚​​本。
  • @Acumenus 设置 PATH 变量可能还不够。根据conda documentation,不建议这样做,因为conda activate 比设置PATH 做得更多。
  • @Xochipilli Setting PATH 在过去的六个月里对我来说已经足够了。我对它没有任何实际问题。一切必要的东西都在容器中工作。但是,我不会在容器外使用或推荐这种方法。
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2020-02-10
  • 1970-01-01
相关资源
最近更新 更多