Не удается запустить Asp.Net Core внутри Docker Linux - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь запустить ASP.Net Core в Docker с помощью docker-compose.Вот содержание dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443


FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["SchoolContact/SchoolContact.csproj", "SchoolContact/"]
RUN dotnet restore "SchoolContact/SchoolContact.csproj"
COPY . .
WORKDIR "/src/SchoolContact"
RUN dotnet build "SchoolContact.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "SchoolContact.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000 80
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SchoolContact.dll"]

Содержимое docker-compose.yml:

version: '3'

services:
  api:
        image: schoolcontact
        build:
          context: .
          dockerfile: SchoolContact/Dockerfile
        links:
          - db:db
        ports:
          - '5000:5000'
        restart: always
        networks:
          - school
  db:
      image: mysql:5.7
      volumes:
        - ./db:/var/lib/mysql
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: 123456
        MYSQL_DATABASE: Test
        MYSQL_USER: admin
        MYSQL_PASSWORD: 123456
      networks:
        - school

  phpmyadmin:
        depends_on:
          - db
        image: phpmyadmin/phpmyadmin
        restart: always
        ports:
          - '8080:80'
        environment:
          PMA_HOST: db
          MYSQL_ROOT_PASSWORD: 123456 
        networks:
          - school

  reverse-proxy:
        container_name: proxy
        image: nginx
        depends_on:
          - api
        ports:
          - "9090:8080"
        volumes:
          - ./proxy.conf:/etc/nginx/conf.d/default.conf
        networks:
          - school

networks:
  school:
volumes:
    db:
       driver: "local"

proxy.conf:

server {
    listen 8080;

    location / {
      proxy_pass http://api:5000;
    }
}

IЯ пробовал слишком много раз, прежде чем публиковать здесь и попросить помощи, я пытался запустить без nginx, выставить порт или нет, так много способов.Но я все еще не могу получить доступ к приложению.Моя последняя цель - разместить приложение в Docker и получить к нему доступ через URL http://localhost:5000.Я не знаю, где я ошибся или что-то упустил.Мне действительно нужна помощь с этим.Спасибо за чтение.

1 Ответ

0 голосов
/ 09 июня 2019

Вот как работает моя, после нескольких недель исследований (для тех, у кого такая же проблема), добавьте эти строки в метод Main .Кроме того, dockerfile и docker-compose.yml должны выглядеть следующим образом:

public static void Main(string[] args)
{
    //CreateWebHostBuilder(args).Build().Run();
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseUrls("http://*:9001")
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

docker-compose.yml

services:
  api:
        image: schoolcontact
        build:
          context: .
          dockerfile: SchoolContact/Dockerfile
        links:
          - db:db
        ports:
          - 9021:9001
        restart: always
        networks:
          - school

dockerfile

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
#EXPOSE 443


FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["SchoolContact/SchoolContact.csproj", "SchoolContact/"]
RUN dotnet restore "SchoolContact/SchoolContact.csproj"
COPY . .
WORKDIR "/src/SchoolContact"
RUN dotnet build "SchoolContact.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "SchoolContact.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
EXPOSE 9001
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SchoolContact.dll"]
...