Вы можете получить эту ошибку, если попытаетесь запустить образ Docker, созданный с другой архитектурой процессора, например amd64 против arm64.
При запуске контейнера вы можете увидеть ошибку формата exec, которую выдает процесс, который пытается запустить ваш контейнер.
Это может быть оболочка, веб-сервер или что-то еще.
Наиболее вероятный виновник – образ, созданный с архитектурой процессора, отличной от архитектуры вашей машины.
Например, доступен только образ amd64, а у вас процессор arm64, например Mx Mac, или наоборот.
Проверить можно, выполнив команду:
$ docker image inspect $YOUR_IMAGE_NAME | grep Architecture
"Architecture": "amd64",
Если вы видите не тот тип архитектуры, который соответствует вашей машине, это ваша проблема.
Вы можете проверить это во время выполнения, установив пользовательский DOCKER_DEFAULT_PLATFORM:
$ DOCKER_DEFAULT_PLATFORM="linux/amd64" docker container run --rm -it debian:bookworm-slim
$ DOCKER_DEFAULT_PLATFORM="linux/arm64" docker container run --rm -it debian:bookworm-slim
В зависимости от архитектуры вашего процессора одна из приведенных выше команд приведет вас к появлению приглашения Bash, в то время как другая выдаст ошибку exec /usr/bin/bash: exec format error.
Образ может быть создан для поддержки нескольких архитектур, и клиент Docker выберет нужную, но это работает только в том случае, если ваша архитектура доступна тому, кто создал образ.
Вы можете собрать образ с определенной архитектурой по требованию с помощью команды DOCKER_DEFAULT_PLATFORM=«linux/amd64» docker build …..
см. также:
- 🐳 Нужно ли использовать дайджесты образов в Dockerfile
- 🐳 Docker ADD и COPY: в чем разница?
- 🐳 Узнаем, как долго работает контейнер Docker