Могу ли я создать файлы Docker для Arm32 с помощью DockerHub?

У меня настроен репозиторий DockerHub для автоматической сборки моего файла Dockerfile, хранящегося в репозитории BitBucket. Каждый раз в файл Dockerfile вносятся изменения, и это работает нормально https://bitbucket.org/ijabz/songkongdocker/src/master/Dockerfile

У меня также есть еще один репозиторий Docker, который указывает на отдельный репозиторий BitBucket https://bitbucket.org/ijabz/songkongdockerarm32/src/master/Dockerfile, который собирает версию приложения для Arm32, и я собирал ее вручную на qnap на основе Arm32, но у меня проблемы с qnap, поэтому я бы хотел построить его на Dockerhub

Я настроил его, но сборка не удалась, мне неясно, нужно ли мне делать что-то особенное для сборки сборок Arm32 или это невозможно.

Сборка Dockerhub завершается неудачей следующим образом

....
    2024-06-18T11:35:16Z 
    2024-06-18T11:35:16Z #10 [build 2/4] RUN /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods --add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.jcmd,jdk.crypto.ec,jdk.dynalink --output /opt/songkong/jre
    2024-06-18T11:35:17Z #10 0.377 exec /bin/sh: exec format error
    2024-06-18T11:35:20Z #10 ERROR: executor failed running [/bin/sh -c /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods --add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.jcmd,jdk.crypto.ec,jdk.dynalink --output /opt/songkong/jre]: exit code: 1
    2024-06-18T11:35:20Z ------
    2024-06-18T11:35:20Z  > [build 2/4] RUN /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods --add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.jcmd,jdk.crypto.ec,jdk.dynalink --output /opt/songkong/jre:
    2024-06-18T11:35:20Z #10 0.377 exec /bin/sh: exec format error
    2024-06-18T11:35:20Z ------
    2024-06-18T11:35:20Z ERROR: failed to solve: executor failed running [/bin/sh -c /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods --add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.jcmd,jdk.crypto.ec,jdk.dynalink --output /opt/songkong/jre]: exit code: 1
    2024-06-18T11:35:20Z Build failed using Buildkit (1)

***Обновлено с попыткой использовать ответ Закса.

Примечание. Я просто пытаюсь собрать сборку Arm32, а не мультисборку, поэтому Я не создавал файл post_push в Bitbucket. Я просто создал папку с крючками и файл сборки, содержащий

#!/bin/bash

# Set up buildx. Inspecting ensures buildx is configured correctly and ready, and the final command runs a container to set up QEMU, enabling the Arm emulation for cross-platform building.
docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# Build & push the arm/v7 image
docker buildx build --platform linux/arm/v7 -t songkong/songkong-arm32:latest -f Dockerfile --push .

я заменил

-t username/repository:tag-arm32

с

-t songkong/songkong-arm32:latest

Итак, songkong — это мое имя пользователя dockerhub, songkong-arm32 — это репозиторий dockerhub (не путайте с репозиторием bitbucket), и я всегда отмечаю как последний

Это запускает автоматическую сборку на DockerHub, и она работает нормально с использованием qemu, однако на последнем этапе попытка отправить тег не удалась следующим образом:

2024-07-03T19:44:28Z Cloning into '.'...
2024-07-03T19:44:29Z Warning: Permanently added the ECDSA host key for IP address '18.205.93.1' to the list of known hosts.
2024-07-03T19:44:30Z Reset branch 'master'
2024-07-03T19:44:30Z Your branch is up to date with 'origin/master'.
2024-07-03T19:44:30Z Executing build hook...
2024-07-03T19:44:39Z mybuilder
2024-07-03T19:44:39Z #1 [internal] booting buildkit
2024-07-03T19:44:39Z #1 pulling image moby/buildkit:buildx-stable-1
2024-07-03T19:44:47Z #1 pulling image moby/buildkit:buildx-stable-1 8.4s done
2024-07-03T19:44:47Z #1 creating container buildx_buildkit_mybuilder0
2024-07-03T19:44:51Z #1 creating container buildx_buildkit_mybuilder0 4.1s done
2024-07-03T19:44:51Z #1 DONE 12.5s
2024-07-03T19:44:51Z Name:          mybuilder
2024-07-03T19:44:51Z Driver:        docker-container
2024-07-03T19:44:51Z Last Activity: 2024-07-03 19:44:39 +0000 UTC
2024-07-03T19:44:51Z 
2024-07-03T19:44:51Z Nodes:
2024-07-03T19:44:51Z Name:      mybuilder0
2024-07-03T19:44:51Z Endpoint:  unix:///var/run/docker.sock
2024-07-03T19:44:51Z Status:    running
2024-07-03T19:44:51Z Buildkit:  v0.14.1
2024-07-03T19:44:51Z Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
2024-07-03T19:44:51Z Unable to find image 'multiarch/qemu-user-static:latest' locally
2024-07-03T19:44:52Z latest: Pulling from multiarch/qemu-user-static
2024-07-03T19:44:52Z 205dae5015e7: Pulling fs layer
2024-07-03T19:44:52Z 816739e52091: Pulling fs layer
2024-07-03T19:44:52Z 30abb83a18eb: Pulling fs layer
2024-07-03T19:44:52Z 0657daef200b: Pulling fs layer
2024-07-03T19:44:52Z 30c9c93f40b9: Pulling fs layer
2024-07-03T19:44:52Z 0657daef200b: Waiting
2024-07-03T19:44:52Z 30c9c93f40b9: Waiting
2024-07-03T19:44:52Z 30abb83a18eb: Verifying Checksum
2024-07-03T19:44:52Z 30abb83a18eb: Download complete
2024-07-03T19:44:52Z 816739e52091: Verifying Checksum
2024-07-03T19:44:52Z 816739e52091: Download complete
2024-07-03T19:44:52Z 205dae5015e7: Verifying Checksum
2024-07-03T19:44:52Z 205dae5015e7: Download complete
2024-07-03T19:44:52Z 0657daef200b: Verifying Checksum
2024-07-03T19:44:52Z 0657daef200b: Download complete
2024-07-03T19:44:52Z 205dae5015e7: Pull complete
2024-07-03T19:44:53Z 816739e52091: Pull complete
2024-07-03T19:44:53Z 30abb83a18eb: Pull complete
2024-07-03T19:44:53Z 30c9c93f40b9: Verifying Checksum
2024-07-03T19:44:53Z 30c9c93f40b9: Download complete
2024-07-03T19:44:53Z 0657daef200b: Pull complete
2024-07-03T19:45:00Z 30c9c93f40b9: Pull complete
2024-07-03T19:45:00Z Digest: sha256:fe60359c92e86a43cc87b3d906006245f77bfc0565676b80004cc666e4feb9f0
2024-07-03T19:45:00Z Status: Downloaded newer image for multiarch/qemu-user-static:latest
2024-07-03T19:45:05Z Setting /usr/bin/qemu-alpha-static as binfmt interpreter for alpha
2024-07-03T19:45:05Z Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm
2024-07-03T19:45:05Z Setting /usr/bin/qemu-armeb-static as binfmt interpreter for armeb
2024-07-03T19:45:05Z Setting /usr/bin/qemu-sparc-static as binfmt interpreter for sparc
2024-07-03T19:45:05Z Setting /usr/bin/qemu-sparc32plus-static as binfmt interpreter for sparc32plus
2024-07-03T19:45:05Z Setting /usr/bin/qemu-sparc64-static as binfmt interpreter for sparc64
2024-07-03T19:45:05Z Setting /usr/bin/qemu-ppc-static as binfmt interpreter for ppc
2024-07-03T19:45:05Z Setting /usr/bin/qemu-ppc64-static as binfmt interpreter for ppc64
2024-07-03T19:45:05Z Setting /usr/bin/qemu-ppc64le-static as binfmt interpreter for ppc64le
2024-07-03T19:45:05Z Setting /usr/bin/qemu-m68k-static as binfmt interpreter for m68k
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mips-static as binfmt interpreter for mips
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mipsel-static as binfmt interpreter for mipsel
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mipsn32-static as binfmt interpreter for mipsn32
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mipsn32el-static as binfmt interpreter for mipsn32el
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mips64-static as binfmt interpreter for mips64
2024-07-03T19:45:05Z Setting /usr/bin/qemu-mips64el-static as binfmt interpreter for mips64el
2024-07-03T19:45:05Z Setting /usr/bin/qemu-sh4-static as binfmt interpreter for sh4
2024-07-03T19:45:05Z Setting /usr/bin/qemu-sh4eb-static as binfmt interpreter for sh4eb
2024-07-03T19:45:05Z Setting /usr/bin/qemu-s390x-static as binfmt interpreter for s390x
2024-07-03T19:45:05Z Setting /usr/bin/qemu-aarch64-static as binfmt interpreter for aarch64
2024-07-03T19:45:05Z Setting /usr/bin/qemu-aarch64_be-static as binfmt interpreter for aarch64_be
2024-07-03T19:45:05Z Setting /usr/bin/qemu-hppa-static as binfmt interpreter for hppa
2024-07-03T19:45:05Z Setting /usr/bin/qemu-riscv32-static as binfmt interpreter for riscv32
2024-07-03T19:45:05Z Setting /usr/bin/qemu-riscv64-static as binfmt interpreter for riscv64
2024-07-03T19:45:05Z Setting /usr/bin/qemu-xtensa-static as binfmt interpreter for xtensa
2024-07-03T19:45:05Z Setting /usr/bin/qemu-xtensaeb-static as binfmt interpreter for xtensaeb
2024-07-03T19:45:05Z Setting /usr/bin/qemu-microblaze-static as binfmt interpreter for microblaze
2024-07-03T19:45:05Z Setting /usr/bin/qemu-microblazeel-static as binfmt interpreter for microblazeel
2024-07-03T19:45:05Z Setting /usr/bin/qemu-or1k-static as binfmt interpreter for or1k
2024-07-03T19:45:05Z Setting /usr/bin/qemu-hexagon-static as binfmt interpreter for hexagon
2024-07-03T19:45:06Z #1 [internal] load build definition from Dockerfile
2024-07-03T19:45:06Z #1 transferring dockerfile: 1.01kB done
2024-07-03T19:45:06Z #1 DONE 0.1s
2024-07-03T19:45:06Z 
2024-07-03T19:45:06Z #2 [auth] library/centos:pull token for registry-1.docker.io
2024-07-03T19:45:06Z #2 DONE 0.0s
2024-07-03T19:45:06Z 
2024-07-03T19:45:06Z #3 [auth] adoptopenjdk/openjdk14:pull token for registry-1.docker.io
2024-07-03T19:45:06Z #3 DONE 0.0s
2024-07-03T19:45:06Z 
2024-07-03T19:45:06Z #4 [internal] load metadata for docker.io/library/centos:7
2024-07-03T19:45:07Z #4 DONE 0.7s
2024-07-03T19:45:07Z 
2024-07-03T19:45:07Z #5 [internal] load metadata for docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12
2024-07-03T19:45:07Z #5 DONE 0.7s
2024-07-03T19:45:07Z 
2024-07-03T19:45:07Z #6 [internal] load .dockerignore
2024-07-03T19:45:07Z #6 transferring context: 2B done
2024-07-03T19:45:07Z #6 DONE 0.0s
2024-07-03T19:45:07Z 
2024-07-03T19:45:07Z #7 [stage-1 1/4] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
2024-07-03T19:45:07Z #7 resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 0.0s done
2024-07-03T19:45:07Z #7 DONE 0.1s
2024-07-03T19:45:07Z 
2024-07-03T19:45:07Z #8 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-03T19:45:07Z #8 resolve docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371 0.0s done
2024-07-03T19:45:07Z #8 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 0B / 198.00MB 0.2s

............

Почему это, кажется, говорит, что образ songkong/songkong-arm32 не существует, но кажется, что он построен нормально?

Обратите внимание, что это говорит

2024-07-12T08:04:31Z ПРЕДУПРЕЖДЕНИЕ: Для драйвера докер-контейнера не указан вывод. Результат сборки останется только в кеше сборки. Чтобы отправить изображение результата в реестр, используйте --push или для загрузки изображения в докер, используйте --load

Может ли это быть проблемой?

2024-07-12T08:03:56Z Cloning into '.'...
2024-07-12T08:03:57Z Warning: Permanently added the ECDSA host key for IP address '104.192.142.24' to the list of known hosts.
2024-07-12T08:03:58Z Reset branch 'master'
2024-07-12T08:03:58Z Your branch is up to date with 'origin/master'.
2024-07-12T08:03:59Z Executing build hook...
2024-07-12T08:04:05Z mybuilder
2024-07-12T08:04:05Z #1 [internal] booting buildkit
2024-07-12T08:04:06Z #1 pulling image moby/buildkit:buildx-stable-1
2024-07-12T08:04:14Z #1 pulling image moby/buildkit:buildx-stable-1 8.2s done
2024-07-12T08:04:14Z #1 creating container buildx_buildkit_mybuilder0
2024-07-12T08:04:18Z #1 creating container buildx_buildkit_mybuilder0 3.9s done
2024-07-12T08:04:18Z #1 DONE 12.1s
2024-07-12T08:04:18Z Name:          mybuilder
2024-07-12T08:04:18Z Driver:        docker-container
2024-07-12T08:04:18Z Last Activity: 2024-07-12 08:04:05 +0000 UTC
2024-07-12T08:04:18Z 
2024-07-12T08:04:18Z Nodes:
2024-07-12T08:04:18Z Name:      mybuilder0
2024-07-12T08:04:18Z Endpoint:  unix:///var/run/docker.sock
2024-07-12T08:04:18Z Status:    running
2024-07-12T08:04:18Z Buildkit:  v0.14.1
2024-07-12T08:04:18Z Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
2024-07-12T08:04:18Z Unable to find image 'multiarch/qemu-user-static:latest' locally
2024-07-12T08:04:18Z latest: Pulling from multiarch/qemu-user-static
2024-07-12T08:04:18Z 205dae5015e7: Pulling fs layer
2024-07-12T08:04:18Z 816739e52091: Pulling fs layer
2024-07-12T08:04:18Z 30abb83a18eb: Pulling fs layer
2024-07-12T08:04:18Z 0657daef200b: Pulling fs layer
2024-07-12T08:04:18Z 30c9c93f40b9: Pulling fs layer
2024-07-12T08:04:18Z 0657daef200b: Waiting
2024-07-12T08:04:18Z 30c9c93f40b9: Waiting
2024-07-12T08:04:18Z 816739e52091: Verifying Checksum
2024-07-12T08:04:18Z 816739e52091: Download complete
2024-07-12T08:04:18Z 30abb83a18eb: Verifying Checksum
2024-07-12T08:04:18Z 30abb83a18eb: Download complete
2024-07-12T08:04:18Z 205dae5015e7: Verifying Checksum
2024-07-12T08:04:18Z 205dae5015e7: Download complete
2024-07-12T08:04:18Z 0657daef200b: Verifying Checksum
2024-07-12T08:04:18Z 0657daef200b: Download complete
2024-07-12T08:04:19Z 205dae5015e7: Pull complete
2024-07-12T08:04:19Z 816739e52091: Pull complete
2024-07-12T08:04:19Z 30abb83a18eb: Pull complete
2024-07-12T08:04:20Z 0657daef200b: Pull complete
2024-07-12T08:04:20Z 30c9c93f40b9: Verifying Checksum
2024-07-12T08:04:20Z 30c9c93f40b9: Download complete
2024-07-12T08:04:26Z 30c9c93f40b9: Pull complete
2024-07-12T08:04:26Z Digest: sha256:fe60359c92e86a43cc87b3d906006245f77bfc0565676b80004cc666e4feb9f0
2024-07-12T08:04:26Z Status: Downloaded newer image for multiarch/qemu-user-static:latest
2024-07-12T08:04:31Z Setting /usr/bin/qemu-alpha-static as binfmt interpreter for alpha
2024-07-12T08:04:31Z Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm
2024-07-12T08:04:31Z Setting /usr/bin/qemu-armeb-static as binfmt interpreter for armeb
2024-07-12T08:04:31Z Setting /usr/bin/qemu-sparc-static as binfmt interpreter for sparc
2024-07-12T08:04:31Z Setting /usr/bin/qemu-sparc32plus-static as binfmt interpreter for sparc32plus
2024-07-12T08:04:31Z Setting /usr/bin/qemu-sparc64-static as binfmt interpreter for sparc64
2024-07-12T08:04:31Z Setting /usr/bin/qemu-ppc-static as binfmt interpreter for ppc
2024-07-12T08:04:31Z Setting /usr/bin/qemu-ppc64-static as binfmt interpreter for ppc64
2024-07-12T08:04:31Z Setting /usr/bin/qemu-ppc64le-static as binfmt interpreter for ppc64le
2024-07-12T08:04:31Z Setting /usr/bin/qemu-m68k-static as binfmt interpreter for m68k
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mips-static as binfmt interpreter for mips
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mipsel-static as binfmt interpreter for mipsel
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mipsn32-static as binfmt interpreter for mipsn32
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mipsn32el-static as binfmt interpreter for mipsn32el
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mips64-static as binfmt interpreter for mips64
2024-07-12T08:04:31Z Setting /usr/bin/qemu-mips64el-static as binfmt interpreter for mips64el
2024-07-12T08:04:31Z Setting /usr/bin/qemu-sh4-static as binfmt interpreter for sh4
2024-07-12T08:04:31Z Setting /usr/bin/qemu-sh4eb-static as binfmt interpreter for sh4eb
2024-07-12T08:04:31Z Setting /usr/bin/qemu-s390x-static as binfmt interpreter for s390x
2024-07-12T08:04:31Z Setting /usr/bin/qemu-aarch64-static as binfmt interpreter for aarch64
2024-07-12T08:04:31Z Setting /usr/bin/qemu-aarch64_be-static as binfmt interpreter for aarch64_be
2024-07-12T08:04:31Z Setting /usr/bin/qemu-hppa-static as binfmt interpreter for hppa
2024-07-12T08:04:31Z Setting /usr/bin/qemu-riscv32-static as binfmt interpreter for riscv32
2024-07-12T08:04:31Z Setting /usr/bin/qemu-riscv64-static as binfmt interpreter for riscv64
2024-07-12T08:04:31Z Setting /usr/bin/qemu-xtensa-static as binfmt interpreter for xtensa
2024-07-12T08:04:31Z Setting /usr/bin/qemu-xtensaeb-static as binfmt interpreter for xtensaeb
2024-07-12T08:04:31Z Setting /usr/bin/qemu-microblaze-static as binfmt interpreter for microblaze
2024-07-12T08:04:31Z Setting /usr/bin/qemu-microblazeel-static as binfmt interpreter for microblazeel
2024-07-12T08:04:31Z Setting /usr/bin/qemu-or1k-static as binfmt interpreter for or1k
2024-07-12T08:04:31Z Setting /usr/bin/qemu-hexagon-static as binfmt interpreter for hexagon
2024-07-12T08:04:31Z 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
2024-07-12T08:04:32Z #1 [internal] load build definition from Dockerfile
2024-07-12T08:04:32Z #1 transferring dockerfile: 1.01kB done
2024-07-12T08:04:32Z #1 DONE 0.1s
2024-07-12T08:04:32Z 
2024-07-12T08:04:32Z #2 [auth] adoptopenjdk/openjdk14:pull token for registry-1.docker.io
2024-07-12T08:04:32Z #2 DONE 0.0s
2024-07-12T08:04:32Z 
2024-07-12T08:04:32Z #3 [auth] library/centos:pull token for registry-1.docker.io
2024-07-12T08:04:32Z #3 DONE 0.0s
2024-07-12T08:04:32Z 
2024-07-12T08:04:32Z #4 [internal] load metadata for docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12
2024-07-12T08:04:32Z #4 ...
2024-07-12T08:04:32Z 
2024-07-12T08:04:32Z #5 [internal] load metadata for docker.io/library/centos:7
2024-07-12T08:04:32Z #5 DONE 0.8s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #4 [internal] load metadata for docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12
2024-07-12T08:04:33Z #4 DONE 0.9s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #6 [internal] load .dockerignore
2024-07-12T08:04:33Z #6 transferring context: 2B 0.0s done
2024-07-12T08:04:33Z #6 DONE 0.0s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #7 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-12T08:04:33Z #7 resolve docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371 0.0s done
2024-07-12T08:04:33Z #7 DONE 0.0s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #8 [stage-1 1/4] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
2024-07-12T08:04:33Z #8 resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 0.0s done
2024-07-12T08:04:33Z #8 DONE 0.0s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #7 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-12T08:04:33Z #7 DONE 0.1s
2024-07-12T08:04:33Z 
2024-07-12T08:04:33Z #8 [stage-1 1/4] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
2024-07-12T08:04:33Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 0B / 70.03MB 0.2s
2024-07-12T08:04:33Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 11.53MB / 70.03MB 0.5s
2024-07-12T08:04:33Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 32.51MB / 70.03MB 0.8s
2024-07-12T08:04:34Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 46.14MB / 70.03MB 1.1s
2024-07-12T08:04:34Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 58.72MB / 70.03MB 1.2s
2024-07-12T08:04:34Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 70.03MB / 70.03MB 1.5s
2024-07-12T08:04:35Z #8 sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 70.03MB / 70.03MB 2.5s done
2024-07-12T08:04:35Z #8 DONE 2.8s
2024-07-12T08:04:35Z 
2024-07-12T08:04:35Z #7 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-12T08:04:35Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 132.12MB / 198.00MB 2.7s
2024-07-12T08:04:35Z #7 sha256:83c03e4400804660ec377662b61bf20e68e92abd1a635726b631c1803e63f56a 66.36MB / 66.36MB 2.7s
2024-07-12T08:04:36Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 149.95MB / 198.00MB 3.0s
2024-07-12T08:04:36Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 161.48MB / 198.00MB 3.5s
2024-07-12T08:04:36Z #7 sha256:83c03e4400804660ec377662b61bf20e68e92abd1a635726b631c1803e63f56a 66.36MB / 66.36MB 3.4s done
2024-07-12T08:04:37Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 182.45MB / 198.00MB 3.9s
2024-07-12T08:04:37Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 197.13MB / 198.00MB 4.1s
2024-07-12T08:04:39Z #7 sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 198.00MB / 198.00MB 6.7s done
2024-07-12T08:04:39Z #7 DONE 6.8s
2024-07-12T08:04:39Z 
2024-07-12T08:04:39Z #8 [stage-1 1/4] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
2024-07-12T08:04:39Z #8 extracting sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af
2024-07-12T08:04:41Z #8 extracting sha256:193bcbf05ff9ae85ac1a58cacd9c07f8f4297dc648808c347cceb3797ae603af 4.7s done
2024-07-12T08:04:41Z #8 DONE 7.6s
2024-07-12T08:04:41Z 
2024-07-12T08:04:41Z #7 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-12T08:04:41Z #7 extracting sha256:83c03e4400804660ec377662b61bf20e68e92abd1a635726b631c1803e63f56a
2024-07-12T08:04:46Z #7 extracting sha256:83c03e4400804660ec377662b61bf20e68e92abd1a635726b631c1803e63f56a 5.1s done
2024-07-12T08:04:46Z #7 extracting sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e
2024-07-12T08:04:49Z #7 ...
2024-07-12T08:04:49Z 
2024-07-12T08:04:49Z #9 [stage-1 2/4] RUN mkdir -p /opt
2024-07-12T08:04:49Z #9 DONE 7.8s
2024-07-12T08:04:49Z 
2024-07-12T08:04:49Z #7 [build 1/4] FROM docker.io/adoptopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12@sha256:b4688d55ba6fe65b1810a6e5fbc2bed5e29ce977e696b6d2e9dbe092a44f0371
2024-07-12T08:04:51Z #7 extracting sha256:0b55b0b0b22c736247c0d6dc7b21b2447811e560821da1daacedd4f669556a2e 5.0s done
2024-07-12T08:04:51Z #7 DONE 17.0s
2024-07-12T08:04:51Z 
2024-07-12T08:04:51Z #10 [build 2/4] RUN /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods --add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.jcmd,jdk.crypto.ec,jdk.dynalink --output /opt/songkong/jre
2024-07-12T08:04:51Z #10 0.204 /bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
2024-07-12T08:06:21Z #10 DONE 89.6s
2024-07-12T08:06:21Z 
2024-07-12T08:06:21Z #11 [build 3/4] RUN mkdir -p /opt  && curl http://www.jthink.net/songkong/downloads/current/songkong-linux-docker.tgz?val=1169.1| tar -C /opt -xzf - && find /opt/songkong -perm /u+x -type f -print0 | xargs -0 chmod a+x
2024-07-12T08:06:21Z #11 0.231 /bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
2024-07-12T08:06:21Z #11 0.578   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
2024-07-12T08:06:21Z #11 0.618                                  Dload  Upload   Total   Spent    Left  Speed
2024-07-12T08:06:41Z #11 0.626 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  1 86.9M    1 1097k    0     0  1396k      0  0:01:03 --:--:--  0:01:03 1434k
  6 86.9M    6 5801k    0     0  3252k      0  0:00:27  0:00:01  0:00:26 3290k
 11 86.9M   11 10.2M    0     0  3758k      0  0:00:23  0:00:02  0:00:21 3786k
 17 86.9M   17 15.1M    0     0  4095k      0  0:00:21  0:00:03  0:00:18 4117k
 22 86.9M   22 19.8M    0     0  4243k      0  0:00:20  0:00:04  0:00:16 4262k
 27 86.9M   27 24.1M    0     0  4269k      0  0:00:20  0:00:05  0:00:15 4720k
 33 86.9M   33 28.8M    0     0  4351k      0  0:00:20  0:00:06  0:00:14 4742k
 37 86.9M   37 32.7M    0     0  4316k      0  0:00:20  0:00:07  0:00:13 4626k
 42 86.9M   42 37.0M    0     0  4319k      0  0:00:20  0:00:08  0:00:12 4489k
 47 86.9M   47 41.4M    0     0  4345k      0  0:00:20  0:00:09  0:00:11 4441k
 52 86.9M   52 45.6M    0     0  4330k      0  0:00:20  0:00:10  0:00:10 4400k
 58 86.9M   58 50.6M    0     0  4400k      0  0:00:20  0:00:11  0:00:09 4466k
 63 86.9M   63 54.8M    0     0  4394k      0  0:00:20  0:00:12  0:00:08 4515k
 66 86.9M   66 57.8M    0     0  4299k      0  0:00:20  0:00:13  0:00:07 4263k
 71 86.9M   71 62.3M    0     0  4321k      0  0:00:20  0:00:14  0:00:06 4275k
 76 86.9M   76 66.7M    0     0  4328k      0  0:00:20  0:00:15  0:00:05 4324k
 83 86.9M   83 72.2M    0     0  4410k      0  0:00:20  0:00:16  0:00:04 4433k
 89 86.9M   89 78.2M    0     0  4508k      0  0:00:19  0:00:17  0:00:02 4800k
 93 86.9M   93 81.7M    0     0  4454k      0  0:00:19  0:00:18  0:00:01 4881k
 99 86.9M   99 86.8M    0     0  4496k      0  0:00:19  0:00:19 --:--:-- 5013k
100 86.9M  100 86.9M    0     0  4489k      0  0:00:19  0:00:19 --:--:-- 5113k
2024-07-12T08:06:42Z #11 DONE 21.2s
2024-07-12T08:06:42Z 
2024-07-12T08:06:42Z #12 [build 4/4] RUN rm -fr /opt/java
2024-07-12T08:06:42Z #12 0.262 /bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
2024-07-12T08:06:42Z #12 DONE 0.5s
2024-07-12T08:06:43Z 
2024-07-12T08:06:43Z #13 [stage-1 3/4] COPY --from=build /opt/songkong /opt/songkong
2024-07-12T08:06:45Z #13 DONE 2.2s
2024-07-12T08:06:45Z 
2024-07-12T08:06:45Z #14 [stage-1 4/4] WORKDIR /opt/songkong
2024-07-12T08:06:45Z #14 DONE 0.1s
2024-07-12T08:06:45Z Image not found! Build may have failed.
2024-07-12T08:06:45Z build hook failed! (1)
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
203
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Контекст

Да, в DockerHub можно создать 32-битную версию вашего приложения для x86 и Arm с поддержкой многоархитектурной сборки. Ваша сборка не удалась, потому что вы создаете образ Arm/v7 на оборудовании x86, что приводит к несоответствию архитектуры и возникновению exec format error. Существует два основных варианта создания образов с несколькими архитектурами:

Вариант 1. Отдельные сборки на целевых архитектурах

  • Создайте 32-битные образы x86 и Arm отдельно на целевой архитектуре и объедините образы в один «многоархитектурный образ» с помощью команды docker manifest. Обратите внимание, что для этого процесс сборки должен иметь доступ к 32-разрядным машинам x86 и Arm. Вы можете использовать отдельные файлы Dockerfile для каждой архитектуры (как сейчас) или объединить свое приложение в один файл Dockerfile с многоэтапными сборками, поддерживающими обе архитектуры.

Вариант 2. Кроссплатформенные сборки с использованием Docker Buildx

  • Создайте 32-битные образы x86 и Arm на одном компьютере (на базе x86) и используйте docker buildx для создания 32-битного образа Arm с помощью инструмента эмуляции QEMU. В этом варианте вы также можете использовать отдельные файлы Dockerfile для каждой архитектуры и объединять изображения с помощью docker manifest или один файл Dockerfile с помощью команды типа docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 \ --tag your-username/multiarch-example:buildx-latest ..

Чтобы минимально изменить текущую настройку, вам следует выбрать вариант 2, используя отдельные файлы Docker. Затем вам нужно будет изменить этап сборки DockerHub тремя способами: установить QEMU, использовать docker buildx для 32-битного файла Docker для Arm и объединить образы Docker x86 и 32-битного Arm с docker manifest.

Для контекста: команда buildx была представлена ​​на DockerCon 2019 в результате сотрудничества Docker и Arm; будучи частью команды, которая его создала, я могу подтвердить ее полезность для вашего варианта использования и многоарочных сборок в целом.

Однако сначала вам необходимо исправить ваш Dockerfile, ориентированный на архитектуру Arm, поскольку базовый образ centos:7 работает только на x86. Вместо этого вам следует заменить его на 'arm32v7/centos:7'.


Изменения сборки DockerHub

Если разобрать, ваш процесс будет выглядеть следующим образом:

  1. Создайте два отдельных файла Dockerfile, по одному для каждой архитектуры.
  2. Создайте и отправьте образ amd64, как сейчас, на DockerHub, который по умолчанию использует docker build.
  3. Создайте и отправьте образ руки/v7, используя docker buildx с помощью специальных перехватчиков сборки DockerHub.
  4. На этапе пользовательской отправки для образа руки/v7 создайте и отправьте многоарочный манифест с помощью docker manifest.

С помощью 32-битного DockerFile Arm создайте папку с именем hooks и добавьте два файла: build и post_push.

Файл build будет выглядеть следующим образом (с инструкциями по отладке, которые помогут устранить любые проблемы):

#!/bin/bash

# set debug flag to help uncover issues
set -e

# Set up buildx. Inspecting ensures buildx is configured correctly and ready, and the final command runs a container to set up QEMU, enabling the Arm emulation for cross-platform building.
docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# Verify qemu is set up correctly
docker run --rm --privileged multiarch/qemu-user-static --show-registrations

# Build the image
docker buildx build --platform linux/arm/v7 -t songkong/songkong-arm32:latest -f Dockerfile .

# Verify the image exists, quit script if not
docker images | grep songkong/songkong-arm32 || { echo "Image not found! Build may have failed."; exit 1; }

# Push the image
docker push songkong/songkong-arm32:latest

Файл post_push:

#!/bin/bash

# Create & push the multi-arch manifest combining x86 and arm/v7 images
docker pull username/repository:tag-amd64

docker manifest create username/repository:tag \
  --amend username/repository:tag-amd64 \
  --amend username/repository:tag-arm32

docker manifest push username/repository:tag

Когда DockerHub выполнит автоматическую сборку вашего 32-битного DockerFile Arm, команды сборки будут перезаписаны вашими новыми командами buildx, а после отправки вытащите уже собранный образ x86 и объедините его с 32-битным образом Arm.

Бег

Если вы захотите запустить этот образ на 32-битном оборудовании x86 и Arm, Docker автоматически определит, где он работает, и выберет правильную версию архитектуры. Ваш стандартный docker pull username/repository:tag подойдет.


Те, кто использует GitHub Actions, могут обратиться к этому файлу .yml, чтобы узнать, как использовать docker buildx в ваших конвейерах CI для создания многоархивных образов.

Спасибо, но я не совсем следую этому, вы говорите, что мне нужно исправить сборку Arm32, чтобы использовать версию Arm32, но первая строка - это версия Arm32 «FROM takeopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12 AS build» и он работал на моем оборудовании на базе руки, пока оно не сломалось. Что мне не совсем понятно, так это то, что если я изменю DockerFile руки, может ли он затем быть автоматически создан DockerHub, когда я его модифицирую, или я могу собрать его только локально с помощью Docker на моем компьютере. Можно ли использовать buildx в DockerHub или просто что-то, что я могу использовать для локальной сборки на своем компьютере?

Paul Taylor 27.06.2024 11:06

Если ваш Dockerfile для Arm работает на оборудовании Arm, вы можете использовать тот же файл для его автоматической сборки в DockerHub с помощью buildx. Вам необходимо изменить сценарий сборки DockerHub, чтобы он вызывал docker buildx, как описано в моем ответе выше, который будет эмулировать 32-битное оборудование Arm для создания совместимого с Arm Dockerfile даже при работе на оборудовании x86. Таким образом, вы можете создать образ Arm Docker без необходимости использования оборудования на базе Arm.

Zach Lasiuk 27.06.2024 16:49

Хорошо, я не вижу, где создать сценарий сборки Dockerhub. У меня есть только DockerFile, и он запускает сборку. Где вы создаете сценарий сборки?

Paul Taylor 01.07.2024 09:11

Я создал для тебя еще одну награду, потому что забыл вовремя наградить другую

Paul Taylor 01.07.2024 10:15

Я обновил свой ответ, чтобы было понятнее, как изменить автоматическую сборку DockerHub с помощью перехватчиков DockerHub. Оно должно ответить на ваш вопрос.

Zach Lasiuk 01.07.2024 18:04

Если вы (и другие) используете GitHub Actions с Docker Build Cloud, в этом руководстве рассказывается, как создавать многоархивные контейнеры с использованием GitHub Actions, без эмуляции или автономных бегунов:

Zach Lasiuk 02.07.2024 19:18

Привет, я обновил свой вопрос, попытавшись найти ваше решение, оно почти сработало, но не удалось отправить тег. Знаете, почему, пожалуйста?

Paul Taylor 03.07.2024 15:38

Извините, мое редактирование потерялось, сейчас я его переделал, чтобы вы могли видеть, что я пробовал и почему это не удалось.

Paul Taylor 03.07.2024 21:07

Я создал для вас еще одну награду и был бы признателен, если бы вы еще раз поискали меня и поняли, почему ваше решение не совсем работает.

Paul Taylor 10.07.2024 10:22

Да, посмотрел. Я не совсем понимаю, почему не удалось выполнить отправку, не просмотрев больше журналов. Шаги отладки: Убедитесь, что QEMU настроен правильно: docker run --rm --privileged multiarch/qemu-user-static --version. Затем разделите основные этапы сборки и отправки Dockerfile и просмотрите журналы, чтобы определить конкретную проблему. Сначала создайте: docker buildx build --platform linux/arm/v7 -t songkong/songkong-arm32:latest -f Dockerfile . Затем docker images, чтобы подтвердить, что это локально, и нажмите docker buildx build --platform linux/arm/v7 -t songkong/songkong-arm32:latest -f Dockerfile --push .

Zach Lasiuk 10.07.2024 16:10

Привет, я добавил полный журнал к вопросу сейчас, не вижу никаких ошибок до конца, надеюсь, этого достаточно для вас, потому что я не вижу способа сломать сборку на dockerhub, но DockerFile отлично собирался на моей машине с Arm32, пока он не сломался .

Paul Taylor 11.07.2024 10:50

Попробуйте модифицированный сценарий сборки в ответе. Он отформатирован так, чтобы предоставлять надежную отладочную информацию и явно проверять, правильно ли построен образ. Это даст четкое представление о том, где следует решить проблему.

Zach Lasiuk 11.07.2024 16:47

На раннем этапе отладочная версия не удалась из-за проблемы с записью, обновлен вопрос с журналами.

Paul Taylor 12.07.2024 10:00

Я удалил строку reistry qemu и повторил попытку сборки, казалось, все прошло нормально, но не удалось найти образ. Ранее я заметил строку, в которой говорится: «2024-07-12T08:04:31Z ПРЕДУПРЕЖДЕНИЕ: для драйвера докер-контейнера не указан вывод. Результат сборки останется только в кеше сборки. Чтобы отправить полученное изображение в реестр, используйте --push, а для загрузки изображения в Docker используйте --load'. (обновленный вопрос с последним журналом) может ли это быть проблемой?

Paul Taylor 12.07.2024 17:12

Не похоже, что QEMU вызывает ошибку. Предупреждение означает, что вам нужно либо добавить команду «--load», либо «--push» на этапе docker buildx build вашего Dockerfile. --load загрузит изображение локально, которое затем можно будет отправить на следующем шаге. Вероятно, это лучше всего в вашей ситуации отладки сейчас. В противном случае вы можете добавить команду «--push» непосредственно на шаг сборки, чтобы одновременно выполнять сборку и отправку.

Zach Lasiuk 19.07.2024 18:03

Да, в этом была проблема, в вашем решении отсутствовала опция --load.

Paul Taylor 22.07.2024 11:50
Ответ принят как подходящий

При последней проверке сборки Docker Hub не поддерживают многоплатформенные варианты. Вы можете следить за прогрессом в этом вопросе по адресу:

Самый популярный метод создания мультиплатформенных образов в наши дни — это использование GitHub Actions . Bitbucket, похоже, поддерживает многоплатформенные сборки в конвейерах.


Судя по обновленному вопросу, есть несколько вещей, которые не соответствуют задокументированным возможностям перехватчиков в сборщиках Docker Hub:

  • Вы не помещаете туда образ, вы только создаете его, а это означает, что они ожидают, что образ будет выведен в локальный механизм докера.
  • Вам не следует указывать имя образа, Docker должен предоставить ему переменные.
  • Для buildx вам нужно настроить qemu перед сборщиком.
  • Нет необходимости в сохранении или сбросе qemu.

Результирующий файл перехватчиков/сборки будет выглядеть так:

#!/bin/bash

set -e

docker run --rm --privileged multiarch/qemu-user-static:register
docker buildx create --name mybuilder --use
# the variables in the below command are populated by Hub and should not be altered
# the --load is important here to output to the docker engine
docker buildx build --platform linux/arm/v7 -f "${DOCKERFILE_PATH}" -t "${IMAGE_NAME}" --load .

Обратите внимание, что это связано с недокументированным поведением сборщиков Hub, поскольку они не указывают поддержку buildx.

Хуки описаны здесь: https://docs.docker.com/docker-hub/builds/advanced/. Подробности о том, как другие люди используют хуки, можно найти в ссылках на вышеупомянутые выпуски GitHub.

Я не хочу создавать многоплатформенный образ, я просто хочу иметь возможность создать свой DockerFile, предназначенный для Arm, на DockerHub, возможно ли это?

Paul Taylor 01.07.2024 14:17

У многих пользователей проблемы, как правило, возникают вместе. Если они реализуют вторую ссылку, они, вероятно, также будут поддерживать многоплатформенные сборки.

BMitch 03.07.2024 00:03

@PaulTaylor, была ли у тебя возможность попробовать приведенное выше предложение?

BMitch 13.07.2024 13:02

Да, спасибо, это сработало (не знаю, почему ваше решение не задокументировано, поскольку кажется довольно стандартным требованием для сборки для руки), я наградил вас наградой

Paul Taylor 15.07.2024 11:37

Другие вопросы по теме