$variable
ссылки могут быть расширены либо в Dockerfile, либо с помощью оболочки при запуске команды. Только некоторые команды Dockerfile выполняют расширения переменных ; для RUN, CMD и ENTRYPOINT это делается только оболочкой. Когда оболочка выполняет расширение, она не знает о Docker -specifi c ARG, только о переменных среды, поэтому вам необходимо скопировать аргумент в ENV. пример этого есть в документации Dockerfile .
ARG env
ARG amplify_key
ENV env=$env amplify_key=$amplify_key
CMD init.sh $env $amplify_key
Предполагая, что init.sh
- ваш собственный скрипт, хотя, если у вас есть эти значения в переменных среды, вы можете просто получить к ним доступ напрямую, без передачи их через позиционные параметры.
#!/bin/sh
echo "Running in $env environment"
curl -H "Authorization: Bearer $amplify_key" ...
ARG env
ARG amplify_key
ENV env=$env amplify_key=$amplify_key
CMD ["init.sh"]
Это позволяет упростить переопределение значений переменных во время запуска, а если вам нужно вручную ввести параметры для команды, Набор обязательных опций намного меньше. Если вы используете шаблон ENTRYPOINT, выполняя некоторую первоначальную настройку, а затем запускаете exec "$@"
для запуска CMD, это также работает намного лучше (ENTRYPOINT и sh -c
имеют некоторые сложные взаимодействия).