Я хотел бы условно создавать образы Docker, определенные в файле Compose, для разных платформ. Например, для создания рабочих образов и отправки их в репозиторий контейнера используйте linux/amd64, а для создания образов разработки используйте собственную платформу хоста.
Для отдельных сборок образа Docker Docker docker рекомендует использовать параметр --platform CLI. Однако для Compose единственным способом указать платформу сборки является параметр уровня обслуживания platform.
Я полагаю, что для динамической установки этого параметра можно использовать флаг --env-filedocker compose CLI, при этом в файле компоновки указывается platform: ${BUILD_PLATFORM}, а в файле среды содержится что-то вроде BUILD_PLATFORM = "linux/amd64". Однако это не позволяет использовать опцию «использовать хост-платформу по умолчанию».
Есть ли другой подход, который позволял бы указывать платформу только по желанию, аналогично опущению --platform при использовании команды docker build, не являющейся Compose?
@BMitch Я не говорил, что команда создания запускается только на машине разработчика. Один и тот же файл Compose может использоваться как разработчиками, так и конвейером CI. Необходимость иметь возможность определить хост-платформу по умолчанию актуальна независимо от того, кто ее запускает и где не имеет отношения к вопросу.
Можно запустить docker compose build в конвейере CI, но я думаю, вы обнаружите, что вы один из немногих, кто это делает, и в результате, возможно, будете бороться с инструментами. Добавление многоплатформенных сборок, передача нескольких тегов для semver и многое другое проще сделать непосредственно в конвейере.
@BMitch, извини, нет необходимости обсуждать это дальше.


Для достижения этой цели вы должны иметь возможность использовать значение интерполяции Compose по умолчанию.
Что-то вроде:
...
platform: ${BUILD_PLATFORM:-}
...
У меня это сработало в Debian 12. Я смог собрать с помощью BUILD_PLATFORM=linux docker-compose build, BUILD_PLATFORM=arm docker-compose build и docker-compose build, но не BUILD_PLATFORM=nope docker-compose build. Поддельное значение приводит к ошибке и печатается следующее сообщение: "nope": unknown operating system or architecture: invalid argument.
Указание platform: '' также приводит к поведению «по умолчанию», которое вам нужно.
Мило спасибо! Попробовал это, и это работает.
«Например, для создания рабочих образов и отправки их в репозиторий контейнеров» — это описание конвейера CI, а не то, что разработчики должны запускать с помощью файла компоновки на своей рабочей станции. А в рабочей среде вы, вероятно, захотите создавать многоплатформенные образы.