2016-09-14 3 views
0

Я пытаюсь запустить конфигурацию с помощью Docker, Nginx, Gunicorn и Django.Docker и Nginx proxy_pass между контейнерами

В настоящее время я успешно удалось запустить свой контейнер с Gunicorn и Django приложение, используя следующую команду:

docker run --publish 8003:8000 user/app:latest 

Теперь при подключении к локальной машине: 8003 Я вижу свою работу приложения.

В этот момент я хотел бы настроить мой Nginx в контейнере, чтобы указать на это приложение всякий раз, когда я просматриваю к localhost/app

Мой nginx.conf файл выглядит следующим образом:

... 
http { 
    server { 
     listen 80; 

     location /app { 
     proxy_pass http://127.0.0.1:8003; 
     proxy_set_header Host $host; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 
     } 
} 
... 

я его запускаю с:

docker run --publish 80:80 user/nginx:latest 

Это не работает, и я не могу обмотать голову вокруг этого, спасибо за любые идеи, как решить эту проблему!

ответ

1

Локальный IP-адрес 127.0.0.1 внутри вашего nginx относится только к контейнеру nginx. Есть несколько решений для этого, либо:

  1. Простая вещь, чтобы запустить свой Nginx контейнер в режиме «хост-режим сети». На данный момент 127.0.0.1 фактически ссылается на ваш контейнерный хост, и все должно быть хорошо. См. the docs, но в основном просто добавление --network="host" должно работать. Недостатком этой простоты является то, что она немного менее безопасна.

  2. В качестве альтернативы вы можете использовать «связанные» контейнеры, см. the docs, где вы хотите использовать опцию --link. Таким образом, изнутри контейнера nginx вы можете использовать разрешение DNS для доступа к другому контейнеру, поэтому вы обновите свой proxy_pass до связанного имени. В качестве побочного примечания, делать это от docker-compose делает вещи значительно проще.

Смежные вопросы