首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“码头构建”或“码头运行”时的环境差异

使用“码头构建”或“码头运行”时的环境差异
EN

Stack Overflow用户
提问于 2019-07-30 08:57:39
回答 1查看 147关注 0票数 1

我开始学习码头,我遇到了一些我无法理解的行为。

我想在我的Docker容器中使用conda,但是当使用docker build .时,我遇到了错误/bin/sh: 1: conda: not found。经过一些调查,我认为我发现了问题;conda没有在环境变量PATH中列出。我的简化Dockerfile

代码语言:javascript
复制
FROM continuumio/anaconda3
RUN env
RUN conda info

生成的环境变量不显示对conda的任何引用。但是,当我使用docker run -it continuumio/anaconda3,然后在那里运行命令env时,我的PATH确实包含了对conda的引用。

我认为解决或理解docker rundocker build命令之间的行为差异将(帮助我)解决我最初的问题。有人知道是什么造成了这种差异吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 09:07:44

看看Dockerfile

有一条线:

代码语言:javascript
复制
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有这些变量。这个映像是非常不同的,诊断构建阶段脚本是不容易的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57267898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档