无法在dockerfi中创建conda env

2024-10-01 11:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序文件夹中有一个environment.yml

我的dockerfile中有这个:

RUN conda env create
RUN source activate myenvfromymlfile

当我运行容器时,虽然env没有激活。如果I do conda env list被看见/opt/conda被激活:

^{pr2}$

如果我附加到容器上,我可以手动运行source activate myenvfromymlfile,它可以工作,但是为什么在run指令中不能正常工作呢??在

在示例中,我经常在需要conda的dockerfiles中看到:

CMD [ "source activate your-environment && exec python application.py" ]

有人能解释一下为什么有必要使用amp;使其成为一个命令吗?为什么在RUN指令中运行“source activate”不起作用?我想让我的dockerfile看起来像这样:

RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]

Tags: runpydockerfileenvcmd应用程序sourceenvironment
1条回答
网友
1楼 · 发布于 2024-10-01 11:22:26

考虑下面的Dockerfile

RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]

语句#1conda env create。创建环境并更改磁盘上的文件。在

语句#2source activate myenvfromymlfile。在bash会话中加载一些内容。这里没有磁盘更改

语句3和4指定运行容器时发生的情况

^{pr2}$

所以现在当你运行容器时。您在步骤2中所做的任何操作都不存在,因为启动了一个shell来运行步骤2,当它完成时,shell被关闭。现在,当您运行映像时,一个新的shell启动了,它是一个全新的shell,现在不知道您以前在dockerfile中运行source activate myenvfromymlfile

现在您想在您创建的环境中运行application.py。docker的默认shell是sh -c。所以当您将CMD设置为如下所示时

CMD [ "source activate your-environment && exec python application.py" ]

在容器开始时执行的最后一个命令变成

sh -c "source activate your-environment && exec python application.py"

它激活当前shell中的环境,然后运行程序。在

相关问题 更多 >