[Publicado en forma cruzada y editado desde https://stackoverflow.com/questions/21933955 ya que se consideró demasiado parecido a un administrador de sistemas para StackOverflow.]
Tengo un contenedor acoplable que ejecuta Nginx, que se vincula a otro contenedor acoplable. El nombre de host y la dirección IP del segundo contenedor se cargan en el contenedor Nginx como variables de entorno en el inicio, pero no se conocen antes (es dinámico). Quiero nginx.conf
que use estos valores, p. Ej.
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
¿Cómo puedo obtener variables de entorno en la configuración de Nginx al inicio?
EDITAR 1
Este es el archivo completo, después de la respuesta sugerida a continuación:
env APP_WEB_1_PORT_5000_TCP_ADDR;
# Nginx host configuration for django_app
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /static/ {
alias /app/static/;
}
location /media/ {
alias /app/media/;
}
location / {
proxy_pass http://gunicorn;
}
}
Recargando nginx luego errores:
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
EDIT 2: más detalles
Variables de entorno actuales
root@87ede56e0b11:/# env | grep APP_WEB_1
APP_WEB_1_NAME=/furious_turing/app_web_1
APP_WEB_1_PORT=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP_PROTO=tcp
APP_WEB_1_PORT_5000_TCP_PORT=5000
APP_WEB_1_PORT_5000_TCP_ADDR=172.17.0.63
Root nginx.conf:
root@87ede56e0b11:/# head /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
env APP_WEB_1_PORT_5000_TCP_ADDR;
Configuración del sitio nginx:
root@87ede56e0b11:/# head /etc/nginx/sites-available/default
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
Recargar la configuración de nginx:
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
, obtendría una nueva dirección IP, por lo que también necesitaría reiniciar su contenedor nginx. Docker lo reiniciará con una actualización /etc/hosts
para que no tenga que alterar los archivos de configuración nginx.
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
conserver app_web_1:5000;