我开始学习码头,我遇到了一些我无法理解的行为。
我想在我的Docker容器中使用conda,但是当使用docker build .时,我遇到了错误/bin/sh: 1: conda: not found。经过一些调查,我认为我发现了问题;conda没有在环境变量PATH中列出。我的简化Dockerfile
FROM continuumio/anaconda3
RUN env
RUN conda info生成的环境变量不显示对conda的任何引用。但是,当我使用docker run -it continuumio/anaconda3,然后在那里运行命令env时,我的PATH确实包含了对conda的引用。
我认为解决或理解docker run和docker build命令之间的行为差异将(帮助我)解决我最初的问题。有人知道是什么造成了这种差异吗?提前谢谢。
发布于 2019-07-30 09:07:44
有一条线:
echo "conda activate base" >> ~/.bashrc我相信它是在注册环境变量。
当您运行容器时,conda activate base命令作为.bashrc脚本的一部分被执行。原因如下:https://unix.stackexchange.com/questions/129143/what-is-the-purpose-of-bashrc-and-how-does-it-work
在构建阶段,唯一发生的事情是echo命令写到.bashrc文件。
但是您必须而不是将构建阶段理解为在您的机器上构建。基本映像由其他人(“上游构建”)构建一次,您只获取一个生成的文件系统来在其上运行您的构建(“下游构建”)。
这就是为什么不能依赖基本Dockerfile中的ENV声明的原因。
有一种技术可以让上游构建使用ONBUILD指令影响下行流构建,但这并不适用于您的图像。
很难回答为什么anaconda3的结果文件系统不包含一些已定义的环境变量,以及为什么miniconda有这些变量。这个映像是非常不同的,诊断构建阶段脚本是不容易的。
https://stackoverflow.com/questions/57267898
复制相似问题