【发布时间】:2017-10-11 19:19:18
【问题描述】:
我的应用程序文件夹中有一个environment.yml
我的 dockerfile 中有这个:
RUN conda env create
RUN source activate myenvfromymlfile
当我运行容器时,虽然 env 没有激活。如果我do conda env list 是看到/opt/conda 被激活:
root@9c7181cf86aa:/app# conda env list
# conda environments:
#
myenvfromymlfile /opt/conda/envs/myenvfromymlfile
root * /opt/conda
如果我附加到容器,我可以手动运行 source activate myenvfromymlfile 并且它可以工作,但为什么在 RUN 指令中不起作用??
在示例中,我经常在需要 conda 的 dockerfile 中看到这一点:
CMD [ "source activate your-environment && exec python application.py" ]
有人可以解释为什么必须使用 && 使其成为单个命令吗?为什么在 RUN 指令中运行“源激活”不起作用?我想让我的 dockerfile 看起来像这样:
RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]
【问题讨论】:
-
我不是 dockerfiles 方面的专家,但我认为您正在寻找的内容在这里:docs.docker.com/engine/userguide/eng-image/multistage-build。请参阅标题为
Before multi-stage builds的段落 -
这与我的问题无关。 “source activate myenvfromymlfile”需要使用 && 作为单个命令与“python application.py”一起运行,我不明白为什么
-
关于“&& 使其成为单个命令”,每一层都会增加额外的开销,并且环境变量不会在层之间传递。
-
您可以参考here获取该问题的详细解释。
标签: python docker anaconda conda