.net - docker 正在运行,但我无法使用 localhost 进行连接
问题描述
我有以下 Dockerfile
FROM microsoft/dotnet:latest
WORKDIR /project
我需要一个 .Net webapi 应用程序。我在运行 dotnet 命令时生成了以下 .Net 配置。
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:4900",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"ContentBroker": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
运行 Web API 的端口设置为使用 5000,当我运行 dotnet run 时,我看到以下警告,但应用程序启动
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
Hosting environment: Development
Content root path: /project/ContentBroker
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
运行 docker 时,我使用docker run -it -v $(pwd)/project:/project -p 5000:80 ...
但是,当我尝试使用 http://localhost/ 从 docker 外部访问应用程序时,我只看到无法访问此站点。
我试图更改 .Net 配置文件中使用的端口。我尝试更改运行 docker 时使用的端口:端口组合,并尝试运行 2 个相同的 docker 映像,1 个在端口 5000 上运行 .Net 应用程序,并尝试使用 curl 从第二个容器访问它。但我无法访问。
解决方案
我通常从不回答自己的问题,但我认为这是一个合法的答案。
在多次尝试相同的结果后,我尝试更改 launchSettings.json 文件。如前所述,我对 Go 语言项目使用相同的方法,在该项目中我在运行容器时使用 -p 80:80,并且在容器内部,基于 Go 的 HTTP 服务器绝对没有任何配置。
下面是我用来构建容器的 Dockerfile
FROM microsoft/dotnet:latest
WORKDIR /project
构建后,我使用以下命令运行它
docker run -it -p 8080:5000 -v $(pwd):/project b049b9d625c9
在容器内我使用这个命令创建了一个新网站
dotnet new web --no-https
其次是 dotnet 运行
The template "ASP.NET Core Empty" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on /project/project.csproj...
Restore completed in 2.55 sec for /project/project.csproj.
Restore succeeded.
root@20e80795dbea:/project# dotnet run
Using launch settings from /project/Properties/launchSettings.json...
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
Hosting environment: Development
Content root path: /project
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
此时我无法访问该站点。然后我将launchSettings.json从:
"project": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
至:
"project": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://::5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
并再次运行 dotnet run ,这次我在容器中看到以下输出
dotnet run
Using launch settings from /project/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /project
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.
现在,当使用 http://localhost:8080/ 访问该站点时,我看到“Hello World!” 打印消息,我看到请求被记录在容器中
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:8080/
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 54.3697ms 200
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:8080/favicon.ico
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 1.367ms 200
推荐阅读
- angular - 泳道 ngx-datatable 是否具有像角度材料表中的排序数据访问器?
- android - 在 android 9.0 或更高版本上连续运行服务
- python - 连接两个熊猫数据框并保留样式
- mysql - 如何在 laravel 5.8 或 6 中制作通用自定义包进行身份验证。*
- angular - Angular 9 Ivy 构建 - 扩展错误
- ios - 从 XCode 的调试导航器中清除崩溃日志
- ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000200 向图像添加过滤器时
- wordpress - 我是 wordpress 钩子的初创公司和新手。如何自定义启用和禁用添加到购物车按钮
- javascript - 防止浏览器不记得密码
- python - BeautifulSoup 逐行输出提取的文本