【发布时间】:2020-01-03 21:05:06
【问题描述】:
我正在尝试在 docker 容器中运行 dotnet Web API,但是当我运行它时,我无法导航到该站点,我在浏览器中得到 HTTP ERROR 404。
这是我的 dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY Backend/AppManagerAPI/AppManagerAPI.csproj Backend/AppManagerAPI/
COPY Backend/DTO/DTO.csproj Backend/DTO/
COPY nuget.config ./
COPY Build/dependencies.props Build/
COPY Directory.Build.props ./
COPY ./*.sln ./
COPY Backend/Database/Database.csproj Backend/Database/
COPY Backend/Service/Service.csproj Backend/Service/
COPY Utilities/Utilities.csproj Utilities/
RUN dotnet restore "Backend/AppManagerAPI/AppManagerAPI.csproj"
COPY . .
WORKDIR "/src/Backend/AppManagerAPI"
RUN dotnet build "AppManagerAPI.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "AppManagerAPI.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
EXPOSE 5000
ENTRYPOINT ["dotnet", "AppManagerAPI.dll"]
我添加了.UseUrls("http://*:5000"),所以我在我的 program.cs 上监听来自端口 5000 的每个调用:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://*:5000");
}
如果我运行docker logs appmanager,我会得到这个:
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.
这就是我运行容器的方式:
docker run -d -p 5000:5000 --name appmanager appmanager
我已经尝试了一切,但我不知道我错过了什么......
【问题讨论】:
-
如果你运行
docker logs appmanager,你能看到你的API返回了404吗?如果您的 API 返回 404,那么这是您的 API 内部的编程问题。如果返回 404 的不是您的 API,那么您并没有指向您认为的服务。 -
如果我运行
docker logs appmanager,我会得到我在问题中提到的日志。 @RB。 -
您的请求网址是什么?是否有任何演示可以重现您的问题?
标签: c# .net docker asp.net-core .net-core