Как запустить Docker-контейнер AMD64 на архитектуре ARM.

docker amd64 arm64

Если столкнулись с подобными ошибками

The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested  

К сожалению, не всегда есть возможность использовать Docker-образы, собранные специально под архитектуру ARM, на Mac с процессорами M-серии или на Raspberry Pi. Например, в вашем проекте может быть кастомизированный образ, который передается в команде в виде tar-файла, но собран под архитектуру amd64.

Конечно, можно пересобрать контейнер из Dockerfile. Однако если это не production-среда, а локальный запуск, то изменение архитектуры не всегда рационально. Проще запустить образ в режиме эмуляции.

Ниже приведен пример того, как запустить контейнер amd64 на Raspberry Pi с архитектурой ARM. Примечание: Инструкция актуальна для Linux (Debian/Ubuntu). На macOS с Docker Desktop эмуляция часто настроена по умолчанию.

Предварительные требования: Docker уже установлен и корректно работает с нативными ARM-контейнерами.

1. Установим эмулятор QEMU

sudo apt-get update
sudo apt-get install -y qemu-user-static binfmt-support

2. Зарегистрируйте эмуляцию в ядре

sudo update-binfmts --enable

3. Убедимся, что система приняла настройки

cat /proc/sys/fs/binfmt_misc/qemu-x86_64

В выводе команды должно встречаться Enable

4. Перезапускаем docker сервис

sudo systemctl restart docker

Результат: Теперь контейнеры amd64 будут запускаться на ARM-устройстве. Обратите внимание: Docker может выводить предупреждение о несоответствии архитектуры.

Важно: При запуске рекомендуется явно указывать платформу, чтобы Docker не пытался скачать ARM-версию образа при её наличии: docker run --platform linux/amd64 ...

Предупреждение о производительности: В режиме эмуляции производительность контейнера ниже, а потребление ресурсов выше. Поэтому такое решение нежелательно использовать в production-среде.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *