如何使用 Docker 容器启动 Conda 环境

How to Start a Conda Environment with Docker Container

我是 docker 新手,如果这是一个愚蠢的问题,我深表歉意。

作为背景,我使用无法编辑或更改的 docker 图片。我 运行 带有 docker run [various-args] [image-name] 的容器并启动了容器。如果我随后 运行 docker exec -it [ID] bash,我可以从容器内部得到一个 shell,它成功地执行我所有 python 代码所需的 conda 环境,所以我可以 运行 python script.py 一切都 运行 没问题。

我想自动执行此过程以供将来使用,因此我想将这些命令放入单个脚本中,这样我就不需要在环境中手动键入或执行任何内容。我认为可行的解决方案是:

docker exec -it [ID] bash -c "python script.py"

但这不起作用,给出了 python 代码的导入错误。我的假设是 conda 环境没有激活,所以我尝试执行 conda activate my-env,这会返回一个新的错误:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

因此,我按照说明进行操作,然后 运行 conda init bash 先看看是否有帮助,但最终还是会出现此错误。最终,如果我先执行 bash shell,然后手动启动 运行ning python 代码,一切都很好,但如果我尝试一次完成由于某种原因无法设置 conda 环境。有没有办法在不编辑图像本身的情况下完成这项工作,或者这是否需要重建图像?

提前致谢!

conda activate 函数由 conda init 命令添加到 .bashrc 的代码定义。 Bash 不会来源 .bashrc 除非使用 -l (--login) 标志。

然而,Conda 提供了一个在指定环境中执行的 conda run 命令,而不是麻烦 shell。所以,试试像

docker exec -it [ID] conda run -n my-env python script.py

对于交互式脚本,可能还需要一些额外的 conda run 标志,例如 --live-stream--no-capture-output。参见 conda run -h