Я думаю, что вы не можете сделать это без привязки файла docker.sock
вашего хоста к контейнеру, который позволяет вам запускать команды Docker или связываться с API докера изнутри контейнера. См., Например, this . Обратите внимание, что для этого требуется установить докер в контейнере и что это сопряжено с угрозами безопасности. Не очень хороший вариант.
В качестве альтернативы можно было бы просто добавить переменную окружения (и вручную установить ее так, как вам нужно) в ваш контейнер с помощью клавиши environment
в docker-compose.yaml
.
И, наконец, если у вас все в порядке с изменением вашего файла композиции, вы можете использовать недавнюю функцию: шаблонные конфигурации докеров. Идея в том, что конфиг - это файл, который доступен в контейнере. Он может быть шаблонным, например, он может выглядеть как
{{ .Name }}
, который будет заменен именем вашего контейнера (попробуйте запустить docker container inspect <container_name>
, чтобы увидеть это Name
. Вы можете создать эту конфигурацию один раз, используя
docker config create --template-driver golang <config_name> <path/to/file>
, а затем используйте его в каждом отдельном контейнере, добавив раздел configs:
в корне файла compose, который указывает на вашу внешнюю конфигурацию, и свяжите его с вашими контейнерами (обратите внимание на версию файла compose). , Я думаю, вам нужно, по крайней мере, 3.7
:
# docker-compose.yaml
version: '3.7'
configs:
<config_alias_inside_this_file>:
external: true
name: <config_name>
services:
<service_name>:
configs:
- source: <config_alias_inside_this_file>
target: <path/inside/container>
# uid: '1000' # You can set file mode, owner uid and group gid
# gid: '1000' # here if you need to, check the "long syntax" subsection
# mode: 0644 # at https://docs.docker.com/compose/compose-file/#configs
...
К сожалению, вы не можете создавать шаблонные конфигурации из файла компоновки (пока), но на самом деле это не проблема.