不同的 Dockerfile 如何多架构构建?

我需要在打包镜像 ponponon/hbase:2.4.17 ,这个镜像支持 x86 和 arm,但是 x86 和 arm 需要的 Dockerfile 不一样,怎么使用 dockerfile 构建跨平台镜像?

x86 的 Dockerfile

FROM ubuntu:focal
RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz


RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" | tee -a /etc/profile >/dev/null

COPY entrypoint.sh /root/

arm 的 Dockerfile

FROM ubuntu:focal
RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz


RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64" | tee -a /etc/profile >/dev/null

COPY entrypoint.sh /root/

上面两个 Dockerfile 有两个区别:

  • 首先 /etc/apt/sources.list 的内容不一样,amr 的是带 -ports 后缀的
  • 然后,JAVA_HOME 这个环境变量不一样,x86 的是 /usr/lib/jvm/java-8-openjdk-amd64,arm 的是 /usr/lib/jvm/java-8-openjdk-arm64

在 chatGPT 帮助下,它给了我下面的 Dockerfile

# syntax=docker/dockerfile:1

# x86 架构
FROM ubuntu:focal AS x86

RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz

RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" | tee -a /etc/profile >/dev/null
ENV JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
COPY entrypoint.sh /root/

# ARM 架构
FROM ubuntu:focal AS arm

RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz

RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64" | tee -a /etc/profile >/dev/null
ENV JAVA_HOME="/usr/lib/jvm/java-8-openjdk-arm64"
COPY entrypoint.sh /root/

# 构建多平台镜像
FROM --platform=$BUILDPLATFORM x86 AS x86-platform
FROM --platform=$BUILDPLATFORM arm AS arm-platform

# 根据不同平台选择构建结果
FROM x86-platform AS final
# 或者使用下面的语法,选择 ARM 平台构建结果
# FROM arm-platform AS final

# 继续构建后续指令
# ...

# 定义入口点
CMD ["/root/entrypoint.sh"]

但是这玩意无法正常工作

─➤  docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t ponponon/hbase:2.4.17 .
[+] Building 148.6s (23/45)                                                                                                                                                                                                                                 docker-container:admiring_mahavira
 => [internal] booting buildkit                                                                                                                                                                                                                                                          36.0s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                                                                                                                                                       33.1s
 => => creating container buildx_buildkit_admiring_mahavira0                                                                                                                                                                                                                              2.9s
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                      0.0s
 => => transferring dockerfile: 2.32kB                                                                                                                                                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                         0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                           0.0s
 => resolve image config for docker.io/docker/dockerfile:1                                                                                                                                                                                                                                3.8s
 => [auth] docker/dockerfile:pull token for registry-1.docker.io                                                                                                                                                                                                                          0.0s
 => docker-image://docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                                                                                                                                                  2.8s
 => => resolve docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                                                                                                                                                      0.0s
 => => sha256:a47ff7046597eea0123ea02817165350e3680f75000dc5d69c9a310258e1bedd 11.55MB / 11.55MB                                                                                                                                                                                          2.1s
 => => extracting sha256:a47ff7046597eea0123ea02817165350e3680f75000dc5d69c9a310258e1bedd                                                                                                                                                                                                 0.7s
 => [linux/amd64 internal] load metadata for docker.io/library/ubuntu:focal                                                                                                                                                                                                               4.1s
 => [linux/arm/v7 internal] load metadata for docker.io/library/ubuntu:focal                                                                                                                                                                                                              4.1s
 => [linux/arm64 internal] load metadata for docker.io/library/ubuntu:focal                                                                                                                                                                                                               4.5s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                                                                                                                                                                                             0.0s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                                                                                                                                                                                             0.0s
 => [internal] load build context                                                                                                                                                                                                                                                         0.1s
 => => transferring context: 4.66kB                                                                                                                                                                                                                                                       0.0s
 => [linux/arm64 x86  1/11] FROM docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                   9.0s
 => => resolve docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                                     0.0s
 => => sha256:fd7ea62b7af53fe93cb837560acd7903ee12e26127affb518c2b9efc6500d503 25.97MB / 25.97MB                                                                                                                                                                                          3.6s
 => => extracting sha256:fd7ea62b7af53fe93cb837560acd7903ee12e26127affb518c2b9efc6500d503                                                                                                                                                                                                 5.1s
 => [linux/amd64 x86  1/11] FROM docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                   8.3s
 => => resolve docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                                     0.0s
 => => sha256:01085d60b3a624c06a7132ff0749efc6e6565d9f2531d7685ff559fb5d0f669f 27.51MB / 27.51MB                                                                                                                                                                                          3.4s
 => => extracting sha256:01085d60b3a624c06a7132ff0749efc6e6565d9f2531d7685ff559fb5d0f669f                                                                                                                                                                                                 4.9s
 => [linux/arm/v7 x86  1/11] FROM docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                  5.9s
 => => resolve docker.io/library/ubuntu:focal@sha256:c9820a44b950956a790c354700c1166a7ec648bc0d215fa438d3a339812f1d01                                                                                                                                                                     0.0s
 => => sha256:4eb99abaa83d514d01f419b511a391c5d9d4b1c2cefde8f51e786d8b1c946a7c 23.61MB / 23.61MB                                                                                                                                                                                          2.0s
 => => extracting sha256:4eb99abaa83d514d01f419b511a391c5d9d4b1c2cefde8f51e786d8b1c946a7c                                                                                                                                                                                                 3.8s
 => [linux/arm/v7 x86  2/11] RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF                                                                                                                                                                                                   2.8s
 => [linux/amd64 x86  2/11] RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF                                                                                                                                                                                                    0.7s
 => CANCELED [linux/arm/v7 x86  3/11] RUN apt-get update                                                                                                                                                                                                                                 90.4s
 => [linux/arm64 x86  2/11] RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF                                                                                                                                                                                                    0.7s
 => [linux/amd64 x86  3/11] RUN apt-get update                                                                                                                                                                                                                                            8.0s
 => ERROR [linux/arm64 x86  3/11] RUN apt-get update                                                                                                                                                                                                                                     89.4s
 => [linux/amd64 x86  4/11] RUN apt-get install -y vim                                                                                                                                                                                                                                   15.9s
 => CANCELED [linux/amd64 x86  5/11] RUN apt-get install -y openjdk-8-jdk                                                                                                                                                                                                                66.4s
------
 > [linux/arm64 x86  3/11] RUN apt-get update:
1.759 Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease [265 kB]
2.056 Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease [114 kB]
2.058 Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease [108 kB]
2.060 Get:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security InRelease [114 kB]
7.795 Ign:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
18.69 Ign:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe arm64 Packages
18.70 Ign:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/restricted arm64 Packages
18.70 Ign:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main arm64 Packages
18.76 Ign:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
18.76 Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
30.36 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
30.36 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
30.37 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
30.37 Ign:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe arm64 Packages
30.37 Ign:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/restricted arm64 Packages
30.37 Ign:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main arm64 Packages
30.38 Ign:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
30.44 Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
30.44 Ign:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
30.45 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
30.46 Ign:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
30.46 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
30.47 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
30.48 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
30.48 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
30.49 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
30.50 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
30.50 Ign:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe arm64 Packages
30.50 Ign:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/restricted arm64 Packages
30.50 Ign:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main arm64 Packages
30.52 Ign:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
30.52 Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
30.52 Ign:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
30.53 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
30.55 Ign:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
43.60 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
43.60 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
43.61 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
43.61 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
43.61 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
43.61 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
43.61 Ign:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe arm64 Packages
43.62 Ign:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/restricted arm64 Packages
43.62 Ign:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main arm64 Packages
43.62 Ign:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
55.00 Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
55.00 Ign:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
55.01 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
55.01 Ign:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
55.01 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
55.01 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
55.01 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
55.02 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
55.02 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
55.02 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
55.07 Ign:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe arm64 Packages
55.07 Ign:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/restricted arm64 Packages
55.07 Ign:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main arm64 Packages
55.07 Err:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/multiverse arm64 Packages
55.07   404  Not Found [IP: 101.6.15.130 80]
55.08 Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
55.08 Ign:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
64.10 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
64.11 Ign:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
64.11 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
64.11 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
86.33 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
86.33 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
86.33 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
86.49 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
86.49 Err:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/restricted arm64 Packages
86.49   404  Not Found [IP: 101.6.15.130 80]
86.49 Ign:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
86.50 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
86.50 Ign:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
86.52 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
86.52 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
86.52 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
86.54 Ign:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main arm64 Packages
86.54 Ign:11 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/multiverse arm64 Packages
86.55 Ign:12 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/universe arm64 Packages
86.55 Err:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/main arm64 Packages
86.55   404  Not Found [IP: 101.6.15.130 80]
86.55 Ign:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports/universe arm64 Packages
86.58 Err:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/universe arm64 Packages
86.58   404  Not Found [IP: 101.6.15.130 80]
86.58 Ign:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main arm64 Packages
86.58 Ign:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse arm64 Packages
86.58 Ign:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/restricted arm64 Packages
86.82 Fetched 601 kB in 1min 25s (7041 B/s)
86.82 Reading package lists...
87.33 E: Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/focal/multiverse/binary-arm64/Packages  404  Not Found [IP: 101.6.15.130 80]
87.33 E: Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/focal-updates/restricted/binary-arm64/Packages  404  Not Found [IP: 101.6.15.130 80]
87.33 E: Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/focal-backports/main/binary-arm64/Packages  404  Not Found [IP: 101.6.15.130 80]
87.33 E: Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/focal-security/universe/binary-arm64/Packages  404  Not Found [IP: 101.6.15.130 80]
87.33 E: Some index files failed to download. They have been ignored, or old ones used instead.
------
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
Dockerfile:13
--------------------
  11 |     EOF
  12 |     
  13 | >>> RUN apt-get update
  14 |     RUN apt-get install -y vim
  15 |     RUN apt-get install -y openjdk-8-jdk
--------------------
ERROR: failed to solve: process "/dev/.buildkit_qemu_emulator /bin/sh -c apt-get update" did not complete successfully: exit code: 100

图片.png

从报错来看,这个 docker 分不清哪部分要用 arm,哪部分要用 x86

我该怎么修改这个 Dockerfile 呢?


修改成下面这样还是报错

# syntax=docker/dockerfile:1

# x86 架构
FROM ubuntu:focal AS x86

RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
EOF

RUN apt-get update && apt-get install -y vim openjdk-8-jdk wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz

RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" | tee -a /etc/profile >/dev/null
ENV JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
COPY entrypoint.sh /root/

# ARM 架构
FROM ubuntu:focal AS arm

RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
EOF

RUN apt-get update && apt-get install -y vim openjdk-8-jdk wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz

RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64" | tee -a /etc/profile >/dev/null
ENV JAVA_HOME="/usr/lib/jvm/java-8-openjdk-arm64"
COPY entrypoint.sh /root/

# 根据不同平台选择构建结果
FROM --platform=$BUILDPLATFORM $TARGETPLATFORM AS final
ARG TARGETPLATFORM
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then cp -R /x86/* /; else cp -R /arm/* /; fi

# 定义入口点
CMD ["/root/entrypoint.sh"]

报错

─➤  docker buildx build --platform linux/amd64,linux/arm64 -t ponponon/hbase:2.4.17 .                                                                                                                                                                    1 ↵
[+] Building 2.8s (8/8) FINISHED                                                                                                                                                                                                   docker-container:mybuilder
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                     0.0s
 => => transferring dockerfile: 2.11kB                                                                                                                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                        0.0s
 => => transferring context: 2B                                                                                                                                                                                                                          0.0s
 => resolve image config for docker.io/docker/dockerfile:1                                                                                                                                                                                               0.4s
 => CACHED docker-image://docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                                                                                                          0.0s
 => => resolve docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                                                                                                                     0.0s
 => ERROR [linux/amd64 internal] load metadata for docker.io/linux/arm64:latest                                                                                                                                                                          1.1s
 => CANCELED [linux/amd64 internal] load metadata for docker.io/linux/amd64:latest                                                                                                                                                                       1.1s
 => [auth] linux/arm64:pull token for registry-1.docker.io                                                                                                                                                                                               0.0s
 => [auth] linux/amd64:pull token for registry-1.docker.io                                                                                                                                                                                               0.0s
------
 > [linux/amd64 internal] load metadata for docker.io/linux/arm64:latest:
------
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
Dockerfile:42
--------------------
  40 |     
  41 |     # 根据不同平台选择构建结果
  42 | >>> FROM --platform=$BUILDPLATFORM $TARGETPLATFORM AS final
  43 |     ARG TARGETPLATFORM
  44 |     RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then cp -R /x86/* /; else cp -R /arm/* /; fi
--------------------
ERROR: failed to solve: linux/arm64: pull access denied, repository does not exist or may require authorization: authorization status: 401: authorization failed
阅读 2.5k
2 个回答
# syntax=docker/dockerfile:1

# x86 架构
FROM ubuntu:focal AS x86
# ... ( x86 的 Dockerfile 内容)

# ARM 架构
FROM ubuntu:focal AS arm
# ... ( arm 的 Dockerfile 内容)

# 根据不同平台选择构建结果
FROM --platform=$BUILDPLATFORM $TARGETPLATFORM AS final
COPY --from=final / /

我这里简单测试了一下,稍微简化了一下docker,不过实现的效果应该差不多。

FROM ubuntu:focal
ARG TARGETPLATFORM
ARG TARGETARCH

# 这里直接使用sed,去修改镜像源的名字,arm64和amd64可以通用。
RUN sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/http:\/\/security.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

RUN apt-get update && apt-get install -y vim openjdk-8-jdk wget

# 这里的参数${TARGETPLATFORM}和${TARGETARCH},会根据buildx执行时传入的--platform产生变化,如果构建linux/arm64平台,那么TARGETARCH就是arm64。
RUN echo ${TARGETPLATFORM}, ${TARGETARCH}
WORKDIR /root
#RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
#RUN tar xvf /root/hbase-2.4.17-bin.tar.gz
ENV TARGETPLATFORM ${TARGETPLATFORM}
ENV BUILDPLATFORM ${BUILDPLATFORM}
# 这里设置环境变量,可以把上面的${TARGETARCH},也就是amd64/arm64这两个值传递给环境变量。
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-${TARGETARCH}

# 如果是下载或者拷贝不同版本的包,那么可以这样通过变量传递。
RUN wget http://xxxx.com/dist/etcd-${TARGETARCH}.3.3.tar.gz

CMD [ "/bin/bash" ]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进