我的应用程序文件夹中有一个environment.yml
我的dockerfile中有这个:
RUN conda env create
RUN source activate myenvfromymlfile
当我运行容器时,虽然env没有激活。如果I do conda env list
被看见/opt/conda
被激活:
如果我附加到容器上,我可以手动运行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"]
考虑下面的Dockerfile
语句#1
conda env create
。创建环境并更改磁盘上的文件。在语句#2
source activate myenvfromymlfile
。在bash会话中加载一些内容。这里没有磁盘更改语句3和4指定运行容器时发生的情况
^{pr2}$所以现在当你运行容器时。您在步骤2中所做的任何操作都不存在,因为启动了一个shell来运行步骤2,当它完成时,shell被关闭。现在,当您运行映像时,一个新的shell启动了,它是一个全新的shell,现在不知道您以前在dockerfile中运行
source activate myenvfromymlfile
现在您想在您创建的环境中运行
application.py
。docker的默认shell是sh -c
。所以当您将CMD
设置为如下所示时在容器开始时执行的最后一个命令变成
它激活当前shell中的环境,然后运行程序。在
相关问题 更多 >
编程相关推荐