У меня настроен репозиторий 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)
Да, в DockerHub можно создать 32-битную версию вашего приложения для x86 и Arm с поддержкой многоархитектурной сборки. Ваша сборка не удалась, потому что вы создаете образ Arm/v7 на оборудовании x86, что приводит к несоответствию архитектуры и возникновению exec format error
. Существует два основных варианта создания образов с несколькими архитектурами:
Вариант 1. Отдельные сборки на целевых архитектурах
docker manifest
. Обратите внимание, что для этого процесс сборки должен иметь доступ к 32-разрядным машинам x86 и Arm. Вы можете использовать отдельные файлы Dockerfile для каждой архитектуры (как сейчас) или объединить свое приложение в один файл Dockerfile с многоэтапными сборками, поддерживающими обе архитектуры.Вариант 2. Кроссплатформенные сборки с использованием Docker Buildx
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'.
Если разобрать, ваш процесс будет выглядеть следующим образом:
docker build
.docker buildx
с помощью специальных перехватчиков сборки DockerHub.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 для создания многоархивных образов.
Если ваш Dockerfile для Arm работает на оборудовании Arm, вы можете использовать тот же файл для его автоматической сборки в DockerHub с помощью buildx. Вам необходимо изменить сценарий сборки DockerHub, чтобы он вызывал docker buildx
, как описано в моем ответе выше, который будет эмулировать 32-битное оборудование Arm для создания совместимого с Arm Dockerfile даже при работе на оборудовании x86. Таким образом, вы можете создать образ Arm Docker без необходимости использования оборудования на базе Arm.
Хорошо, я не вижу, где создать сценарий сборки Dockerhub. У меня есть только DockerFile, и он запускает сборку. Где вы создаете сценарий сборки?
Я создал для тебя еще одну награду, потому что забыл вовремя наградить другую
Я обновил свой ответ, чтобы было понятнее, как изменить автоматическую сборку DockerHub с помощью перехватчиков DockerHub. Оно должно ответить на ваш вопрос.
Если вы (и другие) используете GitHub Actions с Docker Build Cloud, в этом руководстве рассказывается, как создавать многоархивные контейнеры с использованием GitHub Actions, без эмуляции или автономных бегунов:
Привет, я обновил свой вопрос, попытавшись найти ваше решение, оно почти сработало, но не удалось отправить тег. Знаете, почему, пожалуйста?
Извините, мое редактирование потерялось, сейчас я его переделал, чтобы вы могли видеть, что я пробовал и почему это не удалось.
Я создал для вас еще одну награду и был бы признателен, если бы вы еще раз поискали меня и поняли, почему ваше решение не совсем работает.
Да, посмотрел. Я не совсем понимаю, почему не удалось выполнить отправку, не просмотрев больше журналов. Шаги отладки: Убедитесь, что 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 .
Привет, я добавил полный журнал к вопросу сейчас, не вижу никаких ошибок до конца, надеюсь, этого достаточно для вас, потому что я не вижу способа сломать сборку на dockerhub, но DockerFile отлично собирался на моей машине с Arm32, пока он не сломался .
Попробуйте модифицированный сценарий сборки в ответе. Он отформатирован так, чтобы предоставлять надежную отладочную информацию и явно проверять, правильно ли построен образ. Это даст четкое представление о том, где следует решить проблему.
На раннем этапе отладочная версия не удалась из-за проблемы с записью, обновлен вопрос с журналами.
Я удалил строку reistry qemu и повторил попытку сборки, казалось, все прошло нормально, но не удалось найти образ. Ранее я заметил строку, в которой говорится: «2024-07-12T08:04:31Z ПРЕДУПРЕЖДЕНИЕ: для драйвера докер-контейнера не указан вывод. Результат сборки останется только в кеше сборки. Чтобы отправить полученное изображение в реестр, используйте --push, а для загрузки изображения в Docker используйте --load'. (обновленный вопрос с последним журналом) может ли это быть проблемой?
Не похоже, что QEMU вызывает ошибку. Предупреждение означает, что вам нужно либо добавить команду «--load», либо «--push» на этапе docker buildx build
вашего Dockerfile. --load загрузит изображение локально, которое затем можно будет отправить на следующем шаге. Вероятно, это лучше всего в вашей ситуации отладки сейчас. В противном случае вы можете добавить команду «--push» непосредственно на шаг сборки, чтобы одновременно выполнять сборку и отправку.
Да, в этом была проблема, в вашем решении отсутствовала опция --load.
При последней проверке сборки Docker Hub не поддерживают многоплатформенные варианты. Вы можете следить за прогрессом в этом вопросе по адресу:
Самый популярный метод создания мультиплатформенных образов в наши дни — это использование GitHub Actions . Bitbucket, похоже, поддерживает многоплатформенные сборки в конвейерах.
Судя по обновленному вопросу, есть несколько вещей, которые не соответствуют задокументированным возможностям перехватчиков в сборщиках Docker Hub:
Результирующий файл перехватчиков/сборки будет выглядеть так:
#!/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, возможно ли это?
У многих пользователей проблемы, как правило, возникают вместе. Если они реализуют вторую ссылку, они, вероятно, также будут поддерживать многоплатформенные сборки.
@PaulTaylor, была ли у тебя возможность попробовать приведенное выше предложение?
Да, спасибо, это сработало (не знаю, почему ваше решение не задокументировано, поскольку кажется довольно стандартным требованием для сборки для руки), я наградил вас наградой
Спасибо, но я не совсем следую этому, вы говорите, что мне нужно исправить сборку Arm32, чтобы использовать версию Arm32, но первая строка - это версия Arm32 «FROM takeopenjdk/openjdk14:armv7l-centos-jdk-14.0.2_12 AS build» и он работал на моем оборудовании на базе руки, пока оно не сломалось. Что мне не совсем понятно, так это то, что если я изменю DockerFile руки, может ли он затем быть автоматически создан DockerHub, когда я его модифицирую, или я могу собрать его только локально с помощью Docker на моем компьютере. Можно ли использовать buildx в DockerHub или просто что-то, что я могу использовать для локальной сборки на своем компьютере?