ENTRYPOINT
должен быть либо действительным массивом JSON, либо он интерпретируется как строка. В вашем случае переменная $REDIS_HOST
не является строкой JSON в кавычках, так что это интерпретируется как форма оболочки, и в результате вы получаете
ENTRYPOINT sh -c '["/usr/bin/dart", "./bin/main.dart", $REDIS_HOST]'
, что напрямую приводит к ошибке, которую вы получение (первое слово этой команды после обработки двойных кавычек - [/usr/bin/dart,
, и это недопустимая команда).
Если вам нужно включить такие вещи, как раскрытие переменных среды, вы должны использовать форму оболочки эти команды, а не форма JSON -array.
CMD /usr/bin/dart ./bin/main.dart $REDIS_HOST
Как @GigaKokaia предлагает в их ответ вы, вероятно, хотите, чтобы эта переменная была переменной среды выполнения, а не Аргумент времени сборки (вы не хотите перестраивать образ при каждом развертывании в другой среде; кластерные и облачные настройки будут иметь разные имена хостов), но с этой формой $REDIS_HOST
не будет оцениваться до тех пор, пока docker run -e
настройки переменных среды обрабатываются. Вы также можете заставить ваше приложение напрямую искать переменную окружения $REDIS_HOST
, а не передавать ее в качестве параметра.