我目前正在重建我们的构建服务器,并为我们的各个项目创建一组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
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“上,构建失败:
/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怎么了?
发布于 2015-10-24 21:11:32
因为您的映像是从“零”构建的,而不是从"centos6“基映像构建的(正如已发布的"centos6-i686”映像一样),即使您将CentOS 6解压缩到文件系统中作为您的第一步,Bash是在此之前启动的,因此您的shell上下文没有有意义的PATH集。在"ENTRYPOINT“之后添加以下内容将导致在构建过程中再次访问所有通常的二进制文件:
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin从映像创建的容器(如果构建好了;比如说,不尝试构建cxxtest)不会受到影响,因为新的Bash实例将通过/etc/profile正确地设置路径。
https://stackoverflow.com/questions/33323403
复制相似问题