docker nginx proxy nginx connect () не удалось (111: соединение отклонено) при подключении к восходящему - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь запустить контейнер nginx в качестве основной точки входа для всех моих сайтов и веб-сервисов. Мне удалось запустить portainer в качестве контейнера, и я могу связаться с ним из Интернета. Сейчас я пытаюсь добраться до статического веб-сайта, размещенного в другом контейнере nginx, но мне не удается это сделать - при переходе по URL-адресу я получаю

502 Bad Gateway

Я попытался добавить раздел upstream в конфигурацию моего основного nginx, но ничего не изменилось (после каждого изменения конфигурации я перезагружаю свою основную службу nginx внутри контейнера).

С другой стороны, добавление апстрима - это то, чего я бы хотел избежать, если это возможно, потому что порождение нескольких разных приложений потребует добавления апстрима для каждого приложения - и это гораздо больше работы, чем я ожидал.

Вот мой основной файл конфигурации nginx:

events {
    worker_connections 1024;
}
http {
    server {
        listen 80;

        location /portainer/ {
            proxy_pass http://portainer:9000/;
        }
        location /helicon/ {
            proxy_pass http://helicon:8001/;
        }
    }
}

Вот как я запускаю свой основной контейнер nginx:

docker run -p 80:80 --name nginx -v /var/nginx/conf:/etc/nginx:ro --net=internal-net -d nginx

Вот файл конфигурации nginx моего статического сайта:

events {
    worker_connections 1024;
}
http {
    server {
        listen  80;

    server_name helicon;
        root /var/www/html/helicon;

        error_log /var/log/nginx/localhost.error.log;
        access_log /var/log/nginx/localhost.access.log;
    }
}

Вот как docker-compose файл создает и запускает этот контейнер:

version: '3.5'
services:
    helicon:
        build: .
        image: helicon
        ports:
            - "127.0.0.1:8001:80"
        container_name: helicon
        networks:
            - internal-net
networks:
    internal-net:
        external: true

Я использую internal-net сеть для хранения всех приложений в одной сети вместо устаревшей опции --link для docker run

Когда я перехожу на http://my.server.ip.address/helicon, я получаю 502. Затем я проверяю логи с помощью docker logs nginx и появляется информация

2018/06/24 11:15:28 [error] 848#848: *466 connect() failed (111: Connection refused) while connecting to upstream, client: Y.Y.Y.Y, server: , request: "GET /helicon/ HTTP/1.1", upstream: "http://172.18.0.2:8001/", host: "X.X.X.X"

Контейнер helicon действительно имеет IP-адрес 172.18.0.2.

Что мне не хватает? Может быть, мой подход должен полностью отличаться от использования сетей?

С уважением,

Daniel

...