Переадресация портов между докерами - PullRequest
0 голосов
/ 04 января 2019

Я запускаю контейнер nginx sudo docker run --name some-nginx -d -p 8030:8030 --rm -v /home/username/nginx_test/nginx.conf:/etc/nginx/nginx.conf:ro nginx:1.15.8alpine

/ home / username / nginx_test / nginx.conf:

user  nginx;
worker_processes  auto;
error_log  /dev/null;
pid        /var/run/nginx.pid;

events { 
    worker_connections  1024;
    multi_accept on;  
    use epoll;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    ##
    # Gzip Settings and client, log settings
    ##



    server {
        listen       8030;
        set $port_endpoint http://127.0.0.1:8080;

        location / {
            proxy_pass $port_endpoint;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
            proxy_redirect     off;
        }
    }
}

Вкл. http://127.0.0.1:8080,есть докерский контейнер проекта django.

Он запускается по типу: sudo docker run --name some-nginx -d -p 8080:8080 --rm some/django:0.1 и

Имеет файл uwsgi:

[uwsgi]
chdir              = /smaple_django
wsgi-file          = /smaple_django/smaple_django/wsgi.py
master             = true
processes          = 10
http               = :8080
vacuum             = true

max-requests       = 1000
harakiri           = 10 

enable-threads     = true
lazy-apps          = true
single-interpreter = true

Этохорошо работает индивидуально, так что мой браузер на http://127.0.0.1:8080(django контейнер), он показывает на первой странице django.

Но когда я захожу на http://127.0.0.1:8030 в моем браузере, он показывает 502 неверных шлюза на nginx.Я думаю, что он должен быть подключен к http://127.0.0.1:8080 этими nginx.conf линиями:

server {
        listen       8030;
        set $port_endpoint http://127.0.0.1:8080;

        location / {
            proxy_pass $port_endpoint;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
            proxy_redirect     off;
        }
    }

Кажется, что в контейнере nginx и контейнере django есть некоторые ошибки.

Где я допустил ошибку?Как я могу решить это?

1 Ответ

0 голосов
/ 04 января 2019

Каждый контейнер имеет собственный интерфейс обратной связи, свой собственный 127.0.0.1.Разговор об этом будет говорить с контейнером внутри, а не с вашим хостом, на котором вы опубликовали порт.Между контейнерами вы общаетесь, размещая их в одной и той же сети, созданной пользователем, и используя имя контейнера, идентификатор или псевдоним для ссылки на контейнеры.Композиционный файл с синтаксисом v2 или v3 делает это автоматически, поэтому я бы рекомендовал идти в этом направлении.

sudo docker network create nginxnet

sudo docker run --net nginxnet --name some-nginx -d -p 8030:8030 --rm -v /home/username/nginx_test/nginx.conf:/etc/nginx/nginx.conf:ro nginx:1.15.8alpine

sudo docker run --net nginxnet --name some-nginx -d -p 8080:8080 --rm some/django:0.1

Используя эту конфигурацию:

server {
        listen       8030;
        set $port_endpoint http://some-nginx:8080;

        location / {
            proxy_pass $port_endpoint;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
            proxy_redirect     off;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...