Вы не можете сделать это по нескольким причинам. Документация envkey в конце концов ссылается на пример в их GitHub , который вы можете найти информативным.
Каждая команда Dockerfile RUN
запускает новую оболочку в новом контейнере. В частности, переменные окружения, установленные в команде RUN
, теряются после ее выхода. Любая форма RUN export ...
не допускается. Если переменные являются статическими, вы можете установить их, используя директиву ENV
, но в этом случае, когда вы запускаете программу, которая должна генерировать их динамически, вам нужен другой подход.
Типичным примером здесь является использование сценария оболочки в качестве ENTRYPOINT
вашего контейнера. Это делает некоторую начальную настройку, а затем заменяет себя контейнером CMD
. Поскольку CMD
работает в той же среде оболочки, что и остальная часть сценария, вы можете выполнить настройку динамической переменной здесь. Сценарий может выглядеть так:
#!/bin/sh
eval "$(envkey-source)"
exec "$@"
Еще одна вещь, о которой следует помнить, это то, что любой может docker inspect
получить ваше изображение и вернуть его переменные среды, или docker run imagename /usr/bin/env
. Если бы вы могли запустить envkey-source
в Dockerfile, то переменные окружения были бы доступны на изображении в виде открытого текста, что противоречит цели. Даже встраивание ключа в изображение приводит к его утечке. Вы должны передать это во время выполнения, используя опцию docker run -e
или ключ Docker Compose environment:
, передавая его из среды хоста.