[ CrossOverflow에 대해 sysadmin과 같은 것으로 간주 되어 https://stackoverflow.com/questions/21933955 에서 교차 게시 및 편집되었습니다 .]
Nginx를 실행하는 도커 컨테이너가 있는데 다른 도커 컨테이너에 연결됩니다. 두 번째 컨테이너의 호스트 이름과 IP 주소는 시작할 때 환경 변수로 Nginx 컨테이너에로드되지만 그 이전에는 알 수 없습니다 (동적). nginx.conf
이 값을 사용 하고 싶습니다. 예 :
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
시작할 때 환경 변수를 Nginx 구성으로 가져 오려면 어떻게해야합니까?
편집 1
아래의 제안 된 답변 후 전체 파일입니다.
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;
}
}
nginx를 다시로드하면 오류가 발생합니다.
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
편집 2 : 자세한 내용
현재 환경 변수
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
루트 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;
사이트 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;
nginx 구성을 다시로드하십시오.
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
하면 새 IP 주소가 생성되므로 nginx 컨테이너도 다시 시작해야합니다. Docker는 업데이트로 다시 시작 /etc/hosts
하므로 nginx 구성 파일을 변경할 필요가 없습니다.
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
과 같이 대체 할 수 있습니다server app_web_1:5000;