Запуск двух Docker-контейнеров (один обратный прокси-сервер nginx, другой - приложение dotnetcore) - PullRequest
0 голосов
/ 12 мая 2019

Первый раз с помощью docker-compose. Попытка настроить контейнер Nginx в качестве веб-сервера и контейнера, в котором хранится мое приложение dotnetcore. Предполагается, что nginx передаст вызов на пустельгу. Оба изображения создаются и запускаются, но при обращении к "http://localhost:8080":

появляется ошибка
proxy_1  | 2019/05/12 16:39:45 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.19.0.2:4000/", host: "localhost:8080"

Структура проекта следующая:

  • Dockersingleproject
    • Dockersingleproject / (приложение dotnetcore)
      • * файлы приложения '
      • DockerFile
    • Nginx /
      • nginx.conf
      • DockerFile
    • докер-compose.yml

У меня сложилось впечатление, что проблема в том, что соединение между контейнером веб-сервера и контейнером приложений отказывается, но я не могу понять, почему. Ниже приложение Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build

WORKDIR /Dockersingleproject
COPY bin/Debug/netcoreapp2.2/publish .

ENV ASPNETCORE_URLS http://+:4000
EXPOSE 4000

ENTRYPOINT ["dotnet", "Dockersingleproject.dll"]

Файл докера приложения предоставляет порт 4000. Файл nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream docker-nginx {
        server app:4000;
    } 

    server {
        listen 8080;

        location / {
            proxy_pass         http://docker-nginx;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            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-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
            proxy_buffers         8 16k;  # Buffer pool = 8 buffers of 16k
            proxy_buffer_size     16k;    # 16k of buffers from pool used for headers
        }
    } 
}

Сервер прослушивает порт 8080 и передает запрос на порт 4000 в серверном «приложении». Который определен в файле docker-compose:

version: '2'

services:
  app:
    build:
      context:  ./Dockersingleproject
      dockerfile: Dockerfile
    ports:
      - "4000:4000"

  proxy:
    build:
      context:  ./nginx
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    links:
      - app

Служба приложений отображает запросы порта 4000 на 4000, и в моей голове это должно работать.

IP-адрес контейнера nginx: 172.19.0.3 IP-адрес контейнера приложения: 172.19.0.2

Пожалуйста, дайте мне знать, где лежит мое замешательство. Я собираюсь обвинить мой компьютер в том, что это проблема. Любая информация приветствуется.

При получении доступа к сайту отказано в соединении, что привело к повреждению шлюза nginx 502

1 Ответ

0 голосов
/ 12 мая 2019

Используется предоставленный Microsoft пример ASP.NET Core:

докер-compose.yaml:

version: "3"

services:

  app:
    image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
    expose:
    - "80"

  proxy:
    image: nginx
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
    - "8080:80"

NB

  • Пример ядра ASP.NET работает на :80 и имеет значение expose 'd
  • Контейнер Nginx также работает на :80 и доступен на хосте на :8080

nginx.conf:

events {}
http {
  server {
    listen 80;
    location / {
        proxy_pass http://app:80;
    }
  }
}

NB

  • Nginx прослушивает :80, потому что это требуется для его контейнера
  • Конфигурация прокси ссылается на имя службы (app) на :80

И

curl \
--silent \
--write-out "%{http_code}" \
--output /dev/null \
http://localhost:8080

200
...