как установить архитектуру при создании многоархивного образа Docker?

Допустим, у меня есть приложение foo построен для множества различных арок (например, foo-arm64, foo-amd64, так далее). Я хотел бы сделать очень маленькие образы Docker вот так:

FROM scratch

ARG ARCH
ADD foo-$ARCH /bin/foo

ENTRYPOINT [ "/bin/foo" ]

Однако когда я создаю образ:

docker build -t foo:arm64 --platform linux/arm64 --build-arg ARCH=arm64 .

архитектура неправильная:

docker inspect foo:arm64 | grep Arch
        "Architecture": "amd64",              # should be arm64??

Кажется, что арка изображения всегда исходит от хоста. Как я могу создать образ Docker с правильной архитектурой, если он отличается от хоста? Как это делают официальные образы Docker?

1 ответ

Используйте команду docker buildx вместо команды docker build -t. Сборка Docker создает только образ докера с соответствующей платформой.

Для получения дополнительной информации см. Документацию: https://www.docker.com/blog/multi-arch-images/

Другие вопросы по тегам