首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"cp:未找到命令“在重新创建和扩展centos6-i 386码头基础映像时

"cp:未找到命令“在重新创建和扩展centos6-i 386码头基础映像时
EN

Stack Overflow用户
提问于 2015-10-24 21:11:32
回答 1查看 752关注 0票数 1

我目前正在重建我们的构建服务器,并为我们的各个项目创建一组Docker映像,因为每个项目都有相当不同的工具链和库需求。由于Docker目前只在64位主机上运行,所以构建服务器将是一台x86_64 Fedora 22计算机。

这些映像必须能够在不修改的情况下构建项目的历史/标记版本;如果需要,我们可以对每个项目的构建过程进行更改,但只对当前主干和未来版本进行更改。

现在,我的一个构建环境需要复制一个旧的i686构建服务器。对于执行32位程序,我只需安装i686支持库(yum install glibc.i686 ncurses-libs.i686),但这并不能帮助我构建32位程序,而无需修改Makefiles将-m32传递给GCC…。而且,正如上文所述,我根本不想改变历史代码基。

因此,我目前的想法基本上是通过安装包括GCC在内的所有i686包,在码头容器中伪造CentOS的一个i686版本。这样,尽管uname -a将报告主机的x86_64体系结构,容器中的其他一切都应该非常一致。我从“centos-i 386”基像那里获得了这个想法(和“centos-i 386”基像),本质上,我试图复制自己的本地形象。

不幸的是,事情进展得不太好。

这里是一个最小的ish Dockerfile

代码语言:javascript
复制
FROM scratch


# Inspiration from https://hub.docker.com/r/toopher/centos-i386/~/dockerfile/
ADD centos6.tar.gz /
RUN echo "i686" > /etc/yum/vars/arch && \
    echo "i386" > /etc/yum/vars/basearch
ENTRYPOINT ["linux32"]

# Base packages
RUN yum update -y && yum -y install epel-release patch sed subversion bzip zip

# AT91SAM9260 ARM compiler
ADD arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 /usr/local/
ENV PATH $PATH:/usr/local/arm-2009q1/bin

# AT91SAM9260 & native cxxtest
ADD cxxtest-3.10.1.tar.gz /staging/
WORKDIR /staging/cxxtest/
RUN cp -r cxxtest /usr/local/arm-2009q1/arm-none-linux-gnueabi/include/
RUN cp -r cxxtest /usr/local/include/
RUN cp cxxtestgen.pl /usr/bin/
RUN ln -s /usr/bin/cxxtestgen.pl /usr/bin/cxxtestgen
WORKDIR /
RUN rm -rf /staging/

在cxxtest安装步骤中的第一个"RUN“上,构建失败:

代码语言:javascript
复制
/bin/sh: cp: command not found
The command '/bin/sh -c cp -r cxxtest /usr/local/arm-2009q1/arm-none-linux-gnueabi/include/' returned a non-zero code: 127

怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-24 21:11:32

因为您的映像是从“零”构建的,而不是从"centos6“基映像构建的(正如已发布的"centos6-i686”映像一样),即使您将CentOS 6解压缩到文件系统中作为您的第一步,Bash是在此之前启动的,因此您的shell上下文没有有意义的PATH集。在"ENTRYPOINT“之后添加以下内容将导致在构建过程中再次访问所有通常的二进制文件:

代码语言:javascript
复制
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

从映像创建的容器(如果构建好了;比如说,不尝试构建cxxtest)不会受到影响,因为新的Bash实例将通过/etc/profile正确地设置路径。

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

https://stackoverflow.com/questions/33323403

复制
相关文章

相似问题

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