我正在创建一个包含 gcc 4.8.5 的 Ubuntu 12.04 docker 映像。我正在获取 gcc 4.8.5 源代码并自己构建它。该容器将在 Ubuntu 18.04 主机上运行。
引用底部的代码,如果我不将其放入 dockerfile 并在启动容器后运行相同的命令,则构建工作正常,但是如果我在 dockerfile 中使用 RUN 代替,则会收到以下构建错误
In file included from /usr/include/stdio.h:28:0,
from ../../../gcc-4.8.5/libgcc/../gcc/tsystem.h:87,
from ../../../gcc-4.8.5/libgcc/libgcc2.c:27:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such
file or directory
#include <bits/predefs.h>
^
该问题似乎源于 ./gcc-4.8.5/configure 调用。
当在容器内运行时我得到:
checking build system type... i686-pc-linux-gnu
当放入 dockerfile 时我得到:
checking build system type... x86_64-unknown-linux-gnu
有人可以填写我对 dockerfiles 中 RUN 的理解吗,因为我觉得我缺少一些关于它如何工作的信息。我的印象是这些命令会在上一层运行?但看起来它们正在我的主机上运行。
## Get gcc 4.8.5 and build it
RUN wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz \
&& tar xzf gcc-4.8.5.tar.gz && \
cd gcc-4.8.5 && \
./contrib/download_prerequisites && \
cd .. && mkdir gccbuild && cd gccbuild && \
../gcc-4.8.5/configure \
--prefix="/opt/gcc" \
--enable-shared --with-system-zlib --enable-threads=posix \
--enable-__cxa_atexit --enable-checking --enable-gnu-indirect-function \
--enable-languages="c,c++" --disable-bootstrap \
&& make all && make install
EDIT:
docker build -t 12.04_builder - < dockerfile
docker run -i -t 12.04_builder
完整的dockerfile:
FROM jnickborys/i386-ubuntu:12.04
RUN apt-get update && \
apt-get install -y \
wget \
build-essential \
libssl-dev \
git \
asciidoc \
libpulse-dev \
libasound2-dev \
libpcsclite-dev
## Get latest cmake that has a 32-bit version
RUN wget https://github.com/Kitware/CMake/releases/download/v3.6.3/cmake-3.6.3-Linux-i386.sh && \
chmod +x cmake-3.6.3-Linux-i386.sh && \
./cmake-3.6.3-Linux-i386.sh --skip-license --prefix=/usr
## Get gcc 4.8.5 and build it
RUN wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz \
&& tar xzf gcc-4.8.5.tar.gz && \
cd gcc-4.8.5 && \
./contrib/download_prerequisites && \
cd .. && mkdir gccbuild && cd gccbuild && \
../gcc-4.8.5/configure \
--prefix="/opt/gcc" \
--enable-shared --with-system-zlib --enable-threads=posix \
--enable-__cxa_atexit --enable-checking --enable-gnu-indirect-function \
--enable-languages="c,c++" --disable-bootstrap
&& make all && make install