具有其他图像的32位docker图像

时间:2019-06-24 03:02:03

标签: docker 32bit-64bit

我有一个带有以下内容的Dockerfile:

FROM i386/alpine

WORKDIR /tmp/src/mybuild

ADD . /tmp/src/mybuild

FROM travisci/travis-build

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

我该如何做?

1 个答案:

答案 0 :(得分:1)

Dockerfile有什么问题:

问题中提到的Dokcerfile是一个多阶段构建文件。每个阶段都以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

希望这会有所帮助。