2022-02-07 22:26:22 +01:00
|
|
|
# syntax=docker/dockerfile:1
|
2021-01-09 11:33:36 +01:00
|
|
|
# The cross-built images have the build arch (`amd64`) embedded in the image
|
|
|
|
# manifest, rather than the target arch. For example:
|
|
|
|
#
|
2021-04-27 23:18:32 +02:00
|
|
|
# $ docker inspect vaultwarden/server:latest-armv7 | jq -r '.[]|.Architecture'
|
2021-01-09 11:33:36 +01:00
|
|
|
# amd64
|
|
|
|
#
|
|
|
|
# Recent versions of Docker have started printing a warning when the image's
|
|
|
|
# claimed arch doesn't match the host arch. For example:
|
|
|
|
#
|
|
|
|
# WARNING: The requested image's platform (linux/amd64) does not match the
|
|
|
|
# detected host platform (linux/arm/v7) and no specific platform was requested
|
|
|
|
#
|
|
|
|
# The image still works fine, but the spurious warning creates confusion.
|
|
|
|
#
|
|
|
|
# Docker doesn't seem to provide a way to directly set the arch of an image
|
|
|
|
# at build time. To resolve the build vs. target arch discrepancy, we use
|
|
|
|
# Docker Buildx to build a new set of images with the correct target arch.
|
|
|
|
#
|
|
|
|
# Docker Buildx uses this Dockerfile to build an image for each requested
|
|
|
|
# platform. Since the Dockerfile basically consists of a single `FROM`
|
|
|
|
# instruction, we're effectively telling Buildx to build a platform-specific
|
|
|
|
# image by simply copying the existing cross-built image and setting the
|
|
|
|
# correct target arch as a side effect.
|
|
|
|
#
|
|
|
|
# References:
|
|
|
|
#
|
|
|
|
# - https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images
|
|
|
|
# - https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
|
|
|
|
# - https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
|
|
|
|
#
|
|
|
|
ARG LOCAL_REPO
|
|
|
|
ARG DOCKER_TAG
|
|
|
|
FROM ${LOCAL_REPO}:${DOCKER_TAG}-${TARGETARCH}${TARGETVARIANT}
|