Nginx proxy_pass в Docker-контейнер не работает - PullRequest
1 голос
/ 08 ноября 2019

У меня два идентичных док-контейнера, работающих на разных портах на сервере CentOS7. Старая версия работает на порте 81, более новая - на порту 8080 (проверено также 82,83).

Когда я пытаюсь проксировать второй контейнер и изменить порт с 81 на 8080, я получаю сообщение об ошибке nginx (HTTP / 1.1 502 Bad Gateway).

Nginx не находится в контейнере. Я просто установил его на сервере.

Вот мой параметр proxy_pass:

location / {
         proxy_pass http://0.0.0.0:8080/;
        }

И некоторые дополнительные сведения:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если я пытаюсь получить доступ к контейнерам напрямую через их порты, все работает нормально.

curl  0.0.0.0:81
{"msg":"Phone Masks service"}
curl  0.0.0.0:8080
{"msg":"Phone Masks service"}

nginx версия:nginx / 1.16.1

Docker версия 19.03.4, сборка 9013bf583a

Полная конфигурация сервера довольно стандартная, я ничего не менял, кроме настройки proxy_pass

server {
       listen       80 default_server;
       listen       [::]:80 default_server;
       server_name  _;
       root         /usr/share/nginx/html;

       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;

       location / {
        proxy_pass http://0.0.0.0:8080/;
       }

       error_page 404 /404.html;
           location = /40x.html {
       }

       error_page 500 502 503 504 /50x.html;
           location = /50x.html {
       }
   }

Команда, которую я использую для запуска контейнера:

sudo docker run --rm -it -p 8080:8080 -e PORT="8080" api
sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                            NAMES
47ef127e3e49        api                 "/start.sh"         26 minutes ago      Up 26 minutes       80/tcp, 0.0.0.0:8080->8080/tcp   infallible_borg
5d5fe891ba30        api                 "/start.sh"         7 hours ago         Up 7 hours          80/tcp, 0.0.0.0:81->81/tcp       hopeful_cerf

1 Ответ

1 голос
/ 08 ноября 2019

Это относится к SElinux:

setsebool -P httpd_can_network_connect true

Согласно этой теме :

Второй [httpd_can_network_connect] позволяет модулям и сценариям httpd создаватьисходящие соединения с портами, которые связаны со службой httpd. Чтобы увидеть список этих портов, запустите semanage port -l |grep -w http_port_t

...