Я пытаюсь запустить контейнер 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