如何在 Docker 中找到我的 .NET Core Web 应用 运行?
How do I find my .NET Core web app running in Docker?
当我在 VS 中本地 运行 我的 .NET Core API 时,我可以在 localhost:5000
处点击它。我添加了一个 Docker 文件来将其容器化,但我不清楚如何找出要公开和使用的端口?
这是我的Docker文件:
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://*:5000
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
图像构建,我 运行 使用此命令:
docker run -p 5000:5000 --name my-api -d my-api
我可以在我的 Docker 客户端的端口 5000 上看到它 运行ning,但是导航到 localhost:5000
没有结果(“localhost 没有发送任何数据”)。
将 ASPNETCORE_URLS 和 EXPOSE 移动到运行时图像部分,如下所示也尝试更改
http://*:5000
至
http://+:5000
Docker 文件
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
Rakesh 的回答有效,但我只是想给你另一种选择。我更喜欢让容器在端口 80 上侦听,因为它是默认端口。如果你想这样做,你可以删除 EXPOSE 和 ASPNETCORE_URLS 语句,所以你的 Dockerfile 变成
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
然后你需要将端口80映射到你想要的端口,当你运行它
docker run -p 5000:80 --name my-api -d my-api
现在您可以通过 http://localhost:5000/
访问它
基于 aspnet 图像的 .NET 应用程序默认侦听端口 80 的原因是 Microsoft 在其中将 ASPNETCORE_URLS 环境变量设置为 http://+:80
并且覆盖了您在其中的任何端口配置您的应用程序设置。
当我在 VS 中本地 运行 我的 .NET Core API 时,我可以在 localhost:5000
处点击它。我添加了一个 Docker 文件来将其容器化,但我不清楚如何找出要公开和使用的端口?
这是我的Docker文件:
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://*:5000
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
图像构建,我 运行 使用此命令:
docker run -p 5000:5000 --name my-api -d my-api
我可以在我的 Docker 客户端的端口 5000 上看到它 运行ning,但是导航到 localhost:5000
没有结果(“localhost 没有发送任何数据”)。
将 ASPNETCORE_URLS 和 EXPOSE 移动到运行时图像部分,如下所示也尝试更改
http://*:5000
至
http://+:5000
Docker 文件
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
Rakesh 的回答有效,但我只是想给你另一种选择。我更喜欢让容器在端口 80 上侦听,因为它是默认端口。如果你想这样做,你可以删除 EXPOSE 和 ASPNETCORE_URLS 语句,所以你的 Dockerfile 变成
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
然后你需要将端口80映射到你想要的端口,当你运行它
docker run -p 5000:80 --name my-api -d my-api
现在您可以通过 http://localhost:5000/
访问它基于 aspnet 图像的 .NET 应用程序默认侦听端口 80 的原因是 Microsoft 在其中将 ASPNETCORE_URLS 环境变量设置为 http://+:80
并且覆盖了您在其中的任何端口配置您的应用程序设置。