Docker LinuxWindows (Docker Desktop)macOS (Docker Desktop)

Docker: запуск образа linux/amd64 на arm64 — диагностика и варианты решения

  • Обновлено
  • Чтение ≈ 5 минут

Краткий ответ

Это узкий случай, когда образ существует, но его запуск на arm64 завершается exec format error или ошибками в двоичных зависимостях. В отличие от no matching manifest, требуется проверить не только наличие манифеста, но и реальную совместимость бинарных файлов.

В этой статье
  1. Что означает ошибка и при каких условиях возникает
  2. Как различить причины
  3. Пошаговая диагностика и исправление
  4. Минимальный пример для отдельного тестового проекта
  5. Как проверить результат и что делать, если проблема осталась

#Что означает ошибка и при каких условиях возникает

Если образ рассчитан на процессоры amd64, а Docker работает на arm64, проверьте поддерживаемые архитектуры, наличие эмуляции и возможность сборки нативного arm64-образа. Это узкий случай, когда образ существует, но его запуск на arm64 завершается exec format error или ошибками в двоичных зависимостях. В отличие от no matching manifest, требуется проверить не только наличие манифеста, но и реальную совместимость бинарных файлов.

#Как различить причины

Возможная причинаКак узнатьЧто делать
В реестре доступен только linux/amd64Многоплатформенный индекс или одиночный манифест не содержит сборки arm64.docker buildx imagetools inspect перечисляет linux/amd64, но не linux/arm64.Выбрать официальный многоархитектурный образ или собрать нативную версию.
Эмуляция x86-64 недоступна или недостаточнаЗапуск amd64 на arm64 может требовать эмуляции и иногда работает медленно или нестабильно.Система предупреждает о платформе, контейнер не стартует либо падает на бинарном файле.Использовать совместимую нативную архитектуру, эмуляцию только для ограниченного теста.
Внутри образа смешаны разные архитектурыОбраз объявлен как arm64, но скопированная исполняемая программа собрана для amd64.Операционная система контейнера arm64, а отдельная программа завершается exec format error.Пересобрать этот бинарный файл для arm64, проверить сборочные стадии и зависимости.
Запрошена не та платформа в конфигурацииВ compose.yaml или Dockerfile жёстко закреплено platform: linux/amd64, хотя образ доступен и для arm64.Контейнер выбирает amd64 несмотря на ARM-хост.Удалить ненужное закрепление после теста реальной совместимости.

#Пошаговая диагностика и исправление

  1. Проверьте платформу движка и симптом без измененийОткройте терминал (Windows — PowerShell, macOS/Linux — «Терминал») и выполните docker version --format "{{.Server.Os}}/{{.Server.Arch}}". В ответе ожидается, например, linux/arm64 для ARM-движка. Затем запустите docker compose logs --tail=80 app для нужного сервиса. Если появляется exec format error, запишите точное имя запускаемого бинарного файла; ошибка бывает и из-за неверного формата скрипта, поэтому одной архитектуры недостаточно для вывода.
  2. Узнайте архитектуру опубликованного образаДля образа в реестре выполните docker buildx imagetools inspect nginx:alpine как безопасный пример и затем ту же команду для вашего фактического образа (подставьте его адрес и тег). В секции Manifest/Platform ищите linux/arm64. Если команда пишет, что buildx не установлен, проверьте версию Docker и доступность компонента сборки. Для приватного реестра потребуется штатная авторизация, не передавайте логины в командной строке.
  3. Сравните платформу уже скачанного образаДля локального образа выполните docker image inspect --format "{{.Os}}/{{.Architecture}}" ИМЯ_ОБРАЗА, заменив ИМЯ_ОБРАЗА фактическим тегом. Эта команда ничего не запускает. Если вывод linux/amd64, а движок linux/arm64, двоичные файлы могут требовать эмуляции; если вывод arm64, но ошибка остаётся, проверьте отдельно исполняемый файл внутри образа и скрипт запуска.
  4. Проверьте, не закреплена ли платформа в ComposeВ редакторе откройте compose.yaml; найдите у службы параметр platform:. Если прописано linux/amd64, выясните, почему он добавлен. Удалять его можно лишь после проверки наличия нативного arm64-варианта и совместимости приложения. Выполните docker compose config -q. В Dockerfile также проверьте платформу у каждой стадии сборки; слепое изменение FROM не исправит сторонний x86-бинарник.
  5. Предпочтите образ с нативной поддержкой arm64Если издатель публикует linux/arm64 для того же продукта, выберите нужную версию и проверьте её через imagetools inspect. В отдельном тестовом проекте выполните docker pull --platform linux/arm64 nginx:alpine, затем docker image inspect для проверки архитектуры. Для собственного приложения пересоберите его под arm64; бинарные зависимости должны поддерживать целевую платформу. Не используйте неподтверждённые сторонние сборки ради скорости.
  6. Когда доступна только amd64-сборка, оцените эмуляциюНа поддерживаемых платформах Docker Desktop может запускать x86_64 под ARM с эмуляцией, а на Linux Engine может понадобиться отдельно настроенный binfmt/QEMU. Это зависит от хоста и прав администратора. Для учебного ограниченного теста после выяснения поддержки допустимо docker run --rm --platform linux/amd64 alpine:3.20 uname -m: ожидаемая строка обычно x86_64. Если получаете exec format error, не модифицируйте binfmt на корпоративном сервере без администратора; предпочтите нативную сборку.
  7. Для собственного проекта собирайте целевую платформу явноВ тестовом каталоге с Dockerfile используйте docker build --platform linux/arm64 -t local-arm-demo:dev . на совместимом сборщике. Такая сборка не гарантирует успешной работы, если установочный скрипт скачивает готовый amd64-бинарник. При многоархитектурной сборке через buildx проверяйте, где создаётся образ и требуется ли реестр: --platform linux/amd64,linux/arm64 не означает, что оба результата обязательно появятся в обычном локальном хранилище.
  8. Запустите проверку только в тестовом окруженииДля нативного тестового образа выполните docker run --rm --platform linux/arm64 alpine:3.20 uname -m на ARM-хосте. Ожидается aarch64, после чего запустите своё приложение и проверьте его функции и зависимости. Не принуждайте рабочую базу данных работать под эмуляцией без подтверждённой совместимости и резервной копии. Если ошибок нет в учебном Alpine, но есть в приложении, ищите собственный бинарник или библиотеку неправильной архитектуры.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Показывает ОС/архитектуру движка и опубликованные платформы демонстрационного образа в реестре.
    Linux · Терминал (Bash)Команда
    Показывает ОС/архитектуру движка и опубликованные платформы демонстрационного образа в реестре. Вторую команду повторите отдельно с проверяемым образом.
    docker version --format "{{.Server.Os}}/{{.Server.Arch}}"
    docker buildx imagetools inspect nginx:alpine
    Вариант 2Замените ИМЯ_ОБРАЗА именем и тегом уже скачанного образа.
    Linux · Терминал (Bash)Команда
    Замените ИМЯ_ОБРАЗА именем и тегом уже скачанного образа. Если его нет локально, команда выдаст ошибку, а не платформу.
    docker image inspect --format "{{.Os}}/{{.Architecture}}" ИМЯ_ОБРАЗА
    Вариант 3Демонстрационные официальные образы для отдельной проверки на ARM.
    Linux · Терминал (Bash)С осторожностью
    Демонстрационные официальные образы для отдельной проверки на ARM. Pull скачивает образ, run создаёт временный контейнер и удаляет его после завершения, никаких локальных пользовательских томов не трогает.
    docker pull --platform linux/arm64 nginx:alpine
    docker run --rm --platform linux/arm64 alpine:3.20 uname -m

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 4Только если хотите проверить доступность эмуляции amd64 на ARM-хосте; может не работать без настройки binfm…
    Linux · Терминал (Bash)С осторожностью
    Только если хотите проверить доступность эмуляции amd64 на ARM-хосте; может не работать без настройки binfmt/QEMU. Не используйте как обязательное исправление рабочего проекта.
    docker run --rm --platform linux/amd64 alpine:3.20 uname -m

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Минимальный пример для отдельного тестового проекта

Текст
Учебный Dockerfile для сборки под arm64 с docker build --platform linux/arm64 -t local-arm-demo:dev .. Если ваш продукт компилируется, его реальные шаги должны поддерживать arm64.
FROM alpine:3.20
CMD ["uname", "-m"]

#Как проверить результат и что делать, если проблема осталась

Успех — образ/исполняемый файл действительно arm64 (для Linux обычно aarch64), контейнер запускается и проходят проверки приложения. Если образ уже arm64, но exec format error остаётся, исследуйте скопированные бинарные программы или неверные окончания строк/интерпретатор скрипта; ошибку не исправить одной опцией platform.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.