gpt4 book ai didi

linux - 创建和扩展 centos 6-i386 Docker 基础镜像时出现 "cp: Command not found"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:35 25 4
gpt4 key购买 nike

我目前正在重建我们的构建服务器,并为我们的各种项目创建一组 Docker 镜像,因为每个项目都有相当不同的工具链和库要求。由于 Docker 目前仅在 64 位主机上运行,​​因此构建服务器将是 x86_64 Fedora 22 机器。

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

现在,我的一个构建环境需要重现旧的 i686 构建服务器。为了执行 32 位程序,我可以简单地安装 i686 支持库(yum install glibc.i686 ncurses-libs.i686),但这并不能帮助我构建 32 -bit 程序,无需修改 Makefile 即可将 -m32 传递给 GCC ……而且,如上所述,我根本不希望更改历史代码库。

因此,我目前的想法是通过安装所有 i686 软件包(包括 GCC)在 Docker 容器中基本上伪造一个 i686 版本的 CentOS。这样,虽然 uname -a 将报告主机的 x86_64 架构,但容器中的其他所有内容都应该非常一致。我的想法(和 centos6.tar.gz)来自 the "centos-i386" base image从本质上讲,我正在尝试为我自己的本地镜像进行复制。

可悲的是,它进行得并不顺利。

这是一个极简的 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

怎么了?

最佳答案

因为你的镜像是从“scratch”构建的,而不是从“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 正确设置 PATH。

关于linux - 创建和扩展 centos 6-i386 Docker 基础镜像时出现 "cp: Command not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com