首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么码头的人不认识皮普?

为什么码头的人不认识皮普?
EN

Stack Overflow用户
提问于 2019-03-08 07:28:50
回答 3查看 1.8K关注 0票数 1

我想要创建一个容器,里面有python和几个在centos上的包。我尝试在原始centos容器中运行几个命令。一切都很好,我安装了我想要的一切。然后,我用通过RUN执行的相同命令创建了RUN,我得到了/bin/sh: pip: command not found,有什么问题吗?我是说现在的情况。为什么所有东西都可以在命令行中执行,而不能用RUN执行呢?我试过这两种变体:

代码语言:javascript
运行
复制
RUN command
RUN command
RUN pip install ...

代码语言:javascript
运行
复制
RUN command\
    && command\
    && pip install ...

我执行的命令:

代码语言:javascript
运行
复制
from centos

run yum install -y centos-release-scl\
    && yum install -y rh-python36\
    && scl enable rh-python36 bash\
    && pip install django

UPD:到pip的完整路径有所帮助。怎么了?

EN

回答 3

Stack Overflow用户

发布于 2019-03-08 08:07:42

您需要首先安装pip

代码语言:javascript
运行
复制
yum install python-pip

或者如果你需要python3 (来自埃佩尔)

代码语言:javascript
运行
复制
yum install python36-pip

不确定时,问yum

代码语言:javascript
运行
复制
yum whatprovides /usr/bin/pip

python2-pip-18.1-1.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : @System
Matched from:
Filename    : /usr/bin/pip

python2-pip-18.1-1.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : updates
Matched from:
Filename    : /usr/bin/pip

python2-pip-18.0-4.fc29.noarch : A tool for installing and managing Python 2 packages
Repo        : fedora
Matched from:
Filename    : /usr/bin/pip

这个输出来自Fedora29,但是在Centos/RHEL中应该得到类似的结果

更新

从评论

但是,当我从docker执行相同的命令时,运行-ti centos,一切都很好。有什么问题吗?

也许你的PATH坏了?你能试一试完整的路径吗?

票数 2
EN

Stack Overflow用户

发布于 2019-03-08 08:58:15

正如@rkosegi已经提到的,这肯定是一个PATH问题。以下几点似乎有效:

代码语言:javascript
运行
复制
FROM centos
ENV PATH /opt/rh/rh-python36/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN yum install -y centos-release-scl
RUN yum install -y rh-python36
RUN scl enable rh-python36 bash
RUN pip install django

我“找到”了上面的PATH,方法是启动一个centos容器并逐个输入命令(因为您已经提到它正在工作)。

BMitch的幻灯片中,可以找到一个很好的解释:sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow.html#24

问:为什么不工作? 为什么我没有找到./build.sh? 运行cd /app/srcRUN ./build.sh

  • 从运行中保存的唯一部分是文件系统(作为一个新层)。
  • 当pid 1退出时,环境变量、启动守护进程和shell状态都会与临时容器一起丢弃。
  • 解决方案:将多行与&&合并: 运行cd /app/src &/build.sh
票数 1
EN

Stack Overflow用户

发布于 2020-07-16 22:53:58

我知道这是一段时间前提出的,但我只是在建立一个码头形象时遇到了这个问题,而且无法很快找到一个好的答案,所以我会把它留给后人。

在我的Dockerfile中添加scl enable命令对我不起作用,所以我发现可以通过运行不使用scl命令启用scl包

source /opt/rh/<package-name>/enable

如果我没记错的话,你就做不到:

代码语言:javascript
运行
复制
RUN source /opt/rh/<package-name>/enable
RUN pip install <package>

因为每个RUN命令都创建了一个不同的层,并且shell会话没有被保留,所以我只是像下面这样一起运行这些命令:

RUN source /opt/rh/rh-python36/enable && pip install <package>

我认为scl命令在Dockerfiles中存在问题,因为scl enable <package> bash将在当前shell中打开一个新的shell,而不是将包添加到当前shell的路径中。

编辑:

找到,您可以通过运行以下命令将包添加到当前shell中:

代码语言:javascript
运行
复制
source scl_source enable <package>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55058587

复制
相关文章

相似问题

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