docker - docker容器中的.net core rest api未运行
问题描述
我对容器化很陌生。我使用默认模板在 Visual Studio 中创建了一个新的 .net core 3.1 rest api。我没有更改默认模板中的任何内容。当我使用 F5 运行它时,它在带有 url https://localhost:44332/weatherforecast 的浏览器中运行良好。现在,我正在尝试使用以下 Dockerfile 配置在 docker 容器中运行它:
来自 mcr.microsoft.com/dotnet/aspnet:3.1
COPY bin/Release/netcoreapp3.1/publish App/
工作目录/应用
曝光 5000
暴露 443
入口点 ["dotnet", "CoreRestApi.dll"]
我能够生成 docker 映像和容器。容器也开始了。但是当我尝试以 https://localhost/weatherforecast 或 http://localhost:5000/weatherforecast 浏览 url 来访问 api 时,它什么也没有显示。
应用程序中 Main 方法的代码如下:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
docker 桌面显示以下内容:
我在这里错过任何一步吗?
解决方案
在您的应用程序的输出中,您可以看到它正在侦听端口 80 ( Now listening on: http://[::]:80
)。
因此,当您运行容器时,您应该将端口 80 映射到主机上的空闲端口。假设我们选择端口 51234。然后你会做
docker run -d -p 51234:80 <your-image-name>
然后你就可以访问 APIhttp://localhost:51234/weatherforecast
Dockerfile 中的 EXPOSE 语句实际上并没有做任何事情。您可以将它们视为有关您使用的端口的文档。好的当然是用一个语句替换您拥有的两个 EXPOSE 语句EXPOSE 80
,但这不会阻止您的容器工作。
推荐阅读
- matplotlib - TypeError: subplots() 为参数“sharex”获取了多个值
- javascript - CRM 2013 基于选项集字段在 webresource 中创建输入字段
- windows - LSASS“拒绝访问”
- java - 无法通过 java 程序在 mac os 中运行 shell 脚本
- c++ - Crypto++ PKCS5_PBKDF2_HMAC 类签名的原因?
- python - 如何在系统范围内可用的虚拟环境中创建脚本的入口点?
- java - 如何在 JTable 中均匀化组件大小?
- algorithm - 如何构建路径短于给定大小的有向图?
- linkedin - 如何通过 3rd 方应用发送 Linkedin 好友请求?
- php - 在 php 中导入之前在 html 表中预览 csv