Как вы подозреваете, вам нужно создать настоящий файл во время выполнения.Одна из полезных в Docker схем - это написание специального сценария точки входа, который выполняет все необходимые настройки, а затем запускает команду основного контейнера.
Если вы используете «большую» базу распространения Linux, envsubst - полезный инструмент для этого.(Он является частью набора инструментов GNU и по умолчанию недоступен для базовых образов Alpine, но в CentOS он должен быть.) Вы можете написать файл шаблона:
buildMode=${BUILD_MODE}
source=${SOURCE}
Затем вы можете скопировать этот шаблон вВаше изображение:
...
WORKDIR /app
COPY ...
COPY system.properties.tmpl ./
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["java", "-jar", "app.jar"]
Сценарию точки входа необходимо запустить envsubst, а затем выполнить команду:
#!/bin/sh
envsubst <system.properties.tmpl >system.properties
exec "$@"
Подобные приемы можно выполнить, просто используя sed (1), который более универсален, но требует более хитрых регулярных выражений.