【问题标题】:Cannot run Asp.Net Core inside docker linux无法在 docker linux 中运行 Asp.Net Core
【发布时间】:2019-05-20 14:05:44
【问题描述】:

我正在尝试使用 docker-compose 让 ASP.Net Core 在 docker 内运行。这是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;
    }
}

在这里发帖寻求帮助之前我尝试了太多次,我尝试在没有nginx的情况下运行,暴露端口与否,这么多方法。但我仍然无法访问该应用程序。我的最终目的是将应用程序托管在 docker 中,并且可以通过 URL http://localhost:5000 访问它。我不知道我哪里错了或错过了其他东西。我真的需要帮助。感谢阅读。

【问题讨论】:

    标签: asp.net-core docker-compose dockerfile


    【解决方案1】:

    这是我的工作方式,经过几周的研究(对于那些有相同问题的人),在 Main 方法中添加这些行。此外,dockerfiledocker-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"]
    

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2019-05-14
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多