Я недавно последовал руководству , чтобы начать работу с ASP. NET и создал простое веб-приложение.
Затем я обнаружил Docker и с этого момента я хотел бы в Dockerize всех моих сервисов.
Моя идея - запустить один контейнер с Nginx и один контейнер с моим ASP. NET Webapp для маршрутизации и управления входящими трафиками c.
Сами контейнеры работают нормально. Я также могу получить доступ к WebApp через открытый порт, но доступ к нему через Nginx через порт 80
возвращает:
502 Bad Gateway.
Я прочитал, что это может быть связано с тем, что Nginx не знает контейнер WebApp, но я проверил, что они находятся в одной сети.
docker logs nginx_container возвращает это, когда я вызываю localhost: 80:
2020/01/14 13:48:18 [error] 6#6: *12 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4000/", host: "localhost"
2020/01/14 13:48:18 [error] 6#6: *12 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4000/", host: "localhost"
2020/01/14 13:48:18 [error] 6#6: *12 no live upstreams while connecting to upstream, client: 172.21.0.1, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://localhost/favicon.ico", host: "localhost", referrer: "http://localhost/"
172.21.0.1 - - [14/Jan/2020:13:48:18 +0000] "GET /favicon.ico HTTP/1.1" 502 559 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
Я предполагаю, что это какая-то конфигурация, в которой я ошибаюсь или не правильно понял. Большая часть конфигурации WebApp была автоматически сгенерирована VS.
Dockerfile WebApp:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 4000
EXPOSE 4500
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["RazorPagesMovie.csproj", "./"]
RUN dotnet restore "RazorPagesMovie.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "RazorPagesMovie.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "RazorPagesMovie.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RazorPagesMovie.dll"]
Nginx Dockerfile:
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
Nginx конфигурация:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream web-api {
server razorpagesmovie:4000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://172.21.0.1:4000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
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_set_header X-Forwarded-Host $server_name;
}
}
}
Docker - Состав:
version: '3.4'
services:
reverseproxy:
build:
context: ./Nginx
dockerfile: Nginx.Dockerfile
ports:
- "80:80"
restart: always
razorpagesmovie:
image: ${DOCKER_REGISTRY-}razorpagesmovie
build:
context: .
dockerfile: Dockerfile
depends_on:
- reverseproxy
restart: always
Docker -Compose-Override:
version: '3.4'
services:
razorpagesmovie:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:4000;http://+:4500
ports:
- "4000:4000"
- "4500:4500"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro