api - docker 无法访问 API dotnet
问题描述
我正在尝试使用 dotnet api 创建一个容器,但是在构建并使用 docker run 命令之后,它无法访问。我需要了解错误发生在哪里才能修复它。
我的一些发行版是 Ubuntu,使用 docker 版本 18.09.5 并使用图像创建 Dockerfile:
microsoft/dotnet:2.2-sdk-alpine microsoft/dotnet:2.2-aspnetcore-runtime-alpine
dockerfile 内容:
FROM microsoft/dotnet:2.2-sdk-alpine AS build-env
WORKDIR /app
ENV ASPNETCORE_URLS http://0.0.0.0:5000
COPY source/*.csproj ./
RUN dotnet restore
COPY source/ ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 5000
ENTRYPOINT ["dotnet", "devops-test.dll", "--urls", "http://0.0.0.0:5000"]
构建命令:
docker build -t freitas/apidotnet .
用于运行应用程序的突击队:
docker run -it -p 5000:5000 freitas/apidotnet
运行后,显示此消息:
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {09e12a74-3a22-4ff3-b882-3f546d91d02a} may be persisted to storage in unencrypted form.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Address not available'.
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
但是,我尝试访问浏览器http://localhost:5000或使用邮递员获取 api,但没有响应。
我对此没有想法。抱歉我的英语不好,感谢您的帮助。
解决方案
我注意到的是输出显示,http://localhost:5000
但您的 docker 文件有多个http://0.0.0.0:5000
.
你没有展示你的program.cs
,所以我假设你有类似的东西:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls(new[] { "http://localhost:5000" });
这似乎是导致问题的原因。您正在提供从多个地方收听的 URL:
- ASPNETCORE_URLS
- 命令行 [--urls]
- 程序.cs
并且它们是按此顺序应用的,因此该program.cs
设置获胜。因此,出于某种原因,您的容器正在侦听,localhost:5000
但没有从外部到达(其他人可能能够解释为什么会这样??)
解决方法是UseUrls
从容器中删除该行program.cs
并重建您的容器。
推荐阅读
- javascript - 取消选中Angular 6中的单选按钮
- ms-access - Microsoft Access 查询结果为空
- java - 递归总和数*带有规则* - 仅递归
- sql-server - 使用 SSIS 将数据从 Excel 传输到 SQL Server
- r - 如何在数据集中创建没有经纬度的 R 闪亮交互式地图
- python - 如何在多线程的不同模块中使用相同的连接池连接?
- python - python pandas.read_csv 库在一列中打印所有内容
- spring - 为什么@RestControllerAdvice 类上的方法返回 HTML 而不是 JSON?
- css - 动态-webkit-linear-gradient
- javascript - 如何使用子集合创建文档