exec format error nghĩa là binary trong image build cho kiến trúc khác với kiến trúc của host. Mac M-series là arm64, docker build mặc định build cho kiến trúc máy hiện tại → image arm64, còn server thường là amd64 (x86_64) → kernel không nạp được ELF.
Kiểm tra nhanh:
docker image inspect myrepo/app:tag --format '{{.Os}}/{{.Architecture}}'
docker buildx imagetools inspect myrepo/app:tag # lists all platforms in the manifestCách xử lý:
# one-off: build for the server platform only
docker buildx build --platform linux/amd64 -t myrepo/app:tag --push .
# proper: publish a multi-platform manifest list
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t myrepo/app:tag --push .Buildx tạo manifest list — client pull sẽ tự chọn image khớp kiến trúc của nó.
Lưu ý thực tế: build arm64 cho amd64 qua QEMU emulation rất chậm (đặc biệt khi biên dịch native module) — với image nặng nên dùng native runner cho mỗi kiến trúc rồi ghép manifest, hoặc dùng cross-compile (Go: GOARCH=amd64). Kèm theo, --platform chỉ ảnh hưởng image, không sửa được dependency đã pin theo kiến trúc trong lockfile.