Если используешь docker-compose то наверно самое простое будет создать файл
docker-entrypoint.sh
Со следующим содержимым:
#!/bin/bash
# shellcheck disable=SC2046
# shellcheck disable=SC2016
set -e
for f in /etc/nginx/templates/*.conf; do
filename=$(basename "$f" .template)
envsubst < "$f" > "/etc/nginx/$filename"
done
# Start Nginx
nginx -g 'daemon off;'
Подключить конфиги nginx и файл docker-entrypoint.sh:
volumes:
- "./nginx/conf.d:/etc/nginx/templates:ro"
- "./nginx/docker-entrypoint.sh:/var/docker-entrypoint.sh:ro"
И подключить env файл с переменными:
env_file:
- "./env/VIRTUAL_HOST.env"
Содержимое VIRTUAL_HOST.env:
VIRTUAL_HOST=localhost
И теперь можно использовать переменные в nginx файлах таким образом:
server {
server_name $VIRTUAL_HOST:8081;
listen 80;
root /app/web;
index index.php;
И теперь, при каждом старте контейнера, будет производиться замена переменных на их значения в конфигурационных файлах nginx.