Kal*_*lik 5 containers kestrel docker asp.net-core
我无法访问其中运行 ASP.NET Core 3.1 应用程序的容器。目标是在端口 5000 上的容器中运行应用程序。当我使用标准 VS 配置文件在本地运行它时,我导航到http://localhost:5000/swagger/index.html以加载 swaggerUI。我想使用 docker 实现同样的事情。
重现我的问题的步骤:
添加带有公开的5000端口和ENV ASPNETCORE_URLS 变量的 dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["myapp/myapp.csproj", "myapp/"]
RUN dotnet restore "myapp/myapp.csproj"
COPY . .
WORKDIR "/src/myapp/"
RUN dotnet build "myapp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "myapp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myapp.dll"]
Run Code Online (Sandbox Code Playgroud)
打造形象
docker build -t myapp .
Run Code Online (Sandbox Code Playgroud)
运行docker镜像:
docker run myapp -p 5000:5000
Run Code Online (Sandbox Code Playgroud)
使用特定的 docker 文件运行上面的命令会产生以下结果:
[21:28:42 INF] Starting host.
[21:28:42 INF] Now listening on: http://[::]:5000
[21:28:42 INF] Application started. Press Ctrl+C to shut down.
[21:28:42 INF] Hosting environment: Production
[21:28:42 INF] Content root path: /app
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用 http://localhost:5000/swagger/index.html 访问容器,因为 ERR_CONNECTION_REFUSED -> 无法访问此站点。
我确实进入容器来检查主机是否正在运行,使用:
docker exec -it containerId /bin/bash
cd /app
dotnet myapp.dll
Run Code Online (Sandbox Code Playgroud)
是什么导致了以下错误:
Unable to start Kestrel.
System.IO.IOException: Failed to bind to address http://[::]:5000: address already in use.
Run Code Online (Sandbox Code Playgroud)
结论是容器内的端口已使用,应用程序处于活动状态,只是无法从外部访问。我不知道如何进入其中。请指出我正确的方向。
更新 问题已解决,答案发布在下面。不过,解释一下为什么需要它以及它是如何工作的会很好!
为了解决这个问题,我必须手动将“--server.urls”添加到入口点,如下所示:
ENTRYPOINT ["dotnet", "myapp.dll", "--server.urls", "https://+:5000"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6158 次 |
| 最近记录: |