应用了其他图像的 32 位 docker 图像

32bit docker image with other images applied to it

我有一个包含以下内容的 Dockerfile:

FROM i386/alpine

WORKDIR /tmp/src/mybuild

ADD . /tmp/src/mybuild

FROM travisci/travis-build

我的目标是最终得到一个包含两个图像内容的 32 位图像。在 运行ning sudo docker build --rm --tag travis-32 . 之后,构建了 "image",但是当我 运行 sudo docker run -it travis-32 /bin/bash 时,我最终进入了 bash 终端并输入 uname -m 给我 x86_64,这显然不是我预期的 32 位。

我怎样才能使这个工作?

Dockerfile有什么问题:

问题中提到的Dokcerfile是一个multi-stage构建文件。每个阶段都从 FROM 开始,其中应该将工件从第一个构建阶段复制到第二个构建阶段,目标是最终获得较小的 docker 图像以用于生产。

在提到的Dokcerfile中:

  • 第一阶段将一些文件复制到i386/alpine图像:
FROM i386/alpine
WORKDIR /tmp/src/mybuild
ADD . /tmp/src/mybuild
  • 然后所做的一切都将被忽略,取而代之的是拍摄另一张图片:
FROM travisci/travis-build

所以最终结果是 travisci/travis-build.

的精确副本

关于32b,64b问题:

通常在32b下编译的东西只能在32b下运行,要想在64b下运行,就需要在64b下编译(除了一些语言比如go,可以定义目标平台),所以需要小心。

示例:

看一看,注意使用 COPY --from= 语句将工件从一个阶段移到另一个阶段的位置:

FROM golang:1.7.3 as builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go    .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"] 

更多信息可以在官方文档中找到:docker multistage-builds

希望这对您有所帮助。