JcM*_*y3r 4 .net c# docker .net-core asp.net-core
我创建了一个 docker 文件并公开了端口。我还设置了我的program.cs来读取这些URL +端口,但我无法访问它。
从我在 Docker 控制台中可以看到我的应用程序正在运行。我就是达不到。
我尝试过 localhost:5024 和 172.17.0.2:5024 但它就是没有命中。
这是我的 docker 文件
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app
EXPOSE 80
EXPOSE 5024
# copy csproj and restore as distinct layers
COPY *.sln .
COPY Api/*.csproj ./Api/
RUN dotnet restore
# copy everything else and build app
COPY Api/. ./Api/
COPY Api.Core/. ./Api.Core/
WORKDIR /app/Api
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=build /app/Api/out ./
ENTRYPOINT ["dotnet", "Api.dll"]
Run Code Online (Sandbox Code Playgroud)
这是我的程序.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
webBuilder.UseIISIntegration();
webBuilder.UseKestrel();
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://*:5024");
});
Run Code Online (Sandbox Code Playgroud)
我运行这些命令来让它运行
docker build -f Api/Dockerfile -t quiplogs_api .
docker run -d -p 5024:80 --name app quiplogs_api
Run Code Online (Sandbox Code Playgroud)
将命令更改docker run为以下内容:
docker run -d -p 5024:5024 --name app quiplogs_api
使用 localhost:5024/api.... 访问 api.... 或更改 UseUrls 以使用端口 80,一切保持不变
在docker的世界里,有两个网络。
首先是 Docker 世界内部,所有容器都在其中运行。第二个是主机。当你编写 Docker 应用程序时,你必须非常小心你所在的网络。
-p 不适用于端口,它是发布选项。
使用此交换机,您可以在主机网络和 docker 网络之间建立链接。您的命令是说发布此容器的主机端口 5024 并将其映射到 docker 网络端口 80。但 UseUrls 实际上是将其配置为在 docker 内的端口 5024 上运行。轻微的语义差异。新命令解决了这个问题。或者您可以更改 UseUrls 以使用端口 80。
| 归档时间: |
|
| 查看次数: |
2769 次 |
| 最近记录: |