【问题标题】:How to Start a Conda Environment with Docker Container如何使用 Docker 容器启动 Conda 环境
【发布时间】:2022-01-18 22:46:37
【问题描述】:

我是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,然后手动开始运行 python 代码,一切都很好,但如果我尝试一次完成所有操作,conda 环境由于某些原因无法设置。有没有办法在不编辑图像本身的情况下完成这项工作,还是需要重建图像?

提前致谢!

【问题讨论】:

    标签: python docker shell conda environment


    【解决方案1】:

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

    但是,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

    【讨论】:

    • 您好,感谢您的回答!抱歉回复晚了;我正在研究这个解决方案,看看它是否可以工作。您的方法不会吐出任何错误,这很好,但是创建 docker 映像后的控制台。在我^C 取消后,我看到我取消了一个 conda 命令并获得了一个CondaError。你现在知道为什么会这样了吗?
    • @JoshB。您是否尝试过使用--live-stream 标志运行?在我看来它正在运行,但你只是在你杀死它之前看不到 I/O(这是 conda run 默认情况下所做的)。
    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多