Исправить сборку образов контейнеров Docker для серверов на архитектуре arm64 #267

Closed
opened 2026-01-10 12:09:47 +00:00 by cuqmbr · 2 comments
Owner

Предыстория

Мы используем Docker для развёртывания компонентов: сервера прокси, лимбо, лобби, ванила, моды. Их сборка автоматизирована средствами Forgejo Actions: после слияния изменений в базовые ветки запускается скрипт сборки и публикации в реестр. Для старта сборки нужно указать под какую архитектуру процессора должен быть собран образ контейнера.

Архитектура процессора виртуальной машины, на которой развёртываем (Oracle Compute Instance) - aarch64 (arm64). Архитектура процессора виртуальной машины, на которой запускается Forgejo Actions - amd64 (x86_64). Для сборки образа контейнера на процессоре одной архитектуры под процессор другой архитектуры нужно использовать виртуализацию.

Проблема

Установка платформы виртуализации QEMU для архитектуры arm64 завершается с ошибкой. Вывод установленных архитектур QEMU и Docker Buildx показывает только платформы x86. Но образы контейнеров под arm64 успешно собираются и публикуются в рееестр.

Задача

  • выяснить почему сборка образов контейнеров под arm64 проходит успешно без виртуализации, подробно описать;
  • изменить скрипты сборки в репозиториях server-base, server-proxy, server-limbo, server-lobby, server-survival и server-mods с учётом выясненного ранее. Возможные варианты (не ограничиваясь ими):
    • убрать настройку виртуализации QEMU;
    • добиться завершения настройки виртуализации QEMU для нужных платформ без ошибок.
### Предыстория Мы используем Docker для развёртывания компонентов: сервера прокси, лимбо, лобби, ванила, моды. Их сборка автоматизирована средствами Forgejo Actions: после слияния изменений в базовые ветки запускается скрипт сборки и публикации в реестр. Для старта сборки нужно указать под какую архитектуру процессора должен быть собран образ контейнера. Архитектура процессора виртуальной машины, на которой развёртываем (Oracle Compute Instance) - aarch64 (arm64). Архитектура процессора виртуальной машины, на которой запускается Forgejo Actions - amd64 (x86_64). Для сборки образа контейнера на процессоре одной архитектуры под процессор другой архитектуры нужно использовать виртуализацию. ### Проблема Установка платформы виртуализации QEMU для архитектуры arm64 завершается с [ошибкой](https://git.cuqmbr.xyz/bebrashield/server-base/actions/runs/2/jobs/0/attempt/1#jobstep-3-181). Вывод установленных архитектур [QEMU](https://git.cuqmbr.xyz/bebrashield/server-base/actions/runs/2/jobs/0/attempt/1#jobstep-3-191) и [Docker Buildx](https://git.cuqmbr.xyz/bebrashield/server-base/actions/runs/2/jobs/0/attempt/1#jobstep-4-136) показывает только платформы x86. Но образы контейнеров под arm64 успешно собираются и публикуются в рееестр. ### Задача - выяснить почему сборка образов контейнеров под arm64 проходит успешно без виртуализации, подробно описать; - изменить скрипты сборки в репозиториях server-base, server-proxy, server-limbo, server-lobby, server-survival и server-mods с учётом выясненного ранее. Возможные варианты (не ограничиваясь ими): - убрать настройку виртуализации QEMU; - добиться завершения настройки виртуализации QEMU для нужных платформ без ошибок.
cuqmbr added this to the Other project 2026-01-10 12:09:48 +00:00
Author
Owner

Сохраняю текст ошибки, чтобы не утатрить доступ к логу Actions:

[command]/usr/bin/docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all
installing: mips64le Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: arm64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: arm Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: s390x Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: ppc64le Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: riscv64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: mips64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
installing: loong64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied
{
  "supported": [
    "linux/amd64",
    "linux/amd64/v2",
    "linux/amd64/v3",
    "linux/386"
  ],
  "emulators": null
}
Сохраняю текст ошибки, чтобы не утатрить доступ к логу Actions: ``` [command]/usr/bin/docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all installing: mips64le Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: arm64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: arm Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: s390x Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: ppc64le Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: riscv64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: mips64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied installing: loong64 Cannot open /proc/sys/fs/binfmt_misc/register: open /proc/sys/fs/binfmt_misc/register: permission denied { "supported": [ "linux/amd64", "linux/amd64/v2", "linux/amd64/v3", "linux/386" ], "emulators": null } ```
Author
Owner

Установка архитектурных типов отличных от системы-хоста завершается неудачей из-за того, что Docker контейнер среды выполнения конвеера и lxc контейнер (поверх Proxmox VE, хост для Forgejo Runner) запущены в непривилегированном режиме.

https://docs.docker.com/build/building/multi-platform
https://pve.proxmox.com/pve-docs/chapter-pct.html#_unprivileged_containers


Сборка образов Docker контейнеров серверов (server-survival, server-mods) происходит успешно из-за того, что базовый образ Docker контейнера (sapmachine) уже собран под используемые нами архитектуры.


Убираем docker/setup-qemu-action из конвееров сборки.

Установка архитектурных типов отличных от системы-хоста завершается неудачей из-за того, что Docker контейнер среды выполнения конвеера и lxc контейнер (поверх Proxmox VE, хост для Forgejo Runner) запущены в непривилегированном режиме. https://docs.docker.com/build/building/multi-platform https://pve.proxmox.com/pve-docs/chapter-pct.html#_unprivileged_containers --- Сборка образов Docker контейнеров серверов (server-survival, server-mods) происходит успешно из-за того, что базовый образ Docker контейнера ([sapmachine](https://sapmachine.io/)) уже собран под используемые нами архитектуры. --- Убираем docker/setup-qemu-action из конвееров сборки.
Sign in to join this conversation.
No description provided.