网络核心项目。我已成功构建该项目。下面是我的 dockerfile。
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 4040
EXPOSE 5050
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj", "MWS.AspNetCoreApis/"]
RUN dotnet restore "MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj"
COPY . .
WORKDIR "/src/MWS.AspNetCoreApis"
RUN dotnet build "MWS.AspNetCoreApis.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MWS.AspNetCoreApis.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD tail -f /dev/null
ENTRYPOINT ["dotnet", "MWS.AspNetCoreApis.dll"]
我将我的应用程序构建为
docker build -t locationservices .
我在这里建立我的形象。然后当我使用 docker run -d locationservices
运行我的图像时它给出了一些长 ID。当我尝试点击 http://localhost:40/swagger/index.html或 http://localhost:5050/swagger/index.html我的网页打不开。当我运行 >docker run -it locationservices 时,我收到以下消息。
Hosting environment: Production Content root path: /app Now listening on: http://[::]:80 Application started. Press Ctrl+C to shut down.
但是我无法使用以下任何网址访问我的应用程序
http://localhost:5050/swagger/index.html
http://localhost:4040/swagger/index.html
http://localhost:80/swagger/index.html
有人可以帮我找出问题所在。任何帮助,将不胜感激。谢谢
最佳答案
这个问题我有点晚了。
但实际问题是您告诉 docker 要公开哪些端口,但它们与 ASP.NET Core 正在监听的端口不匹配。
您需要向 Dockerfile 添加一个与您公开的端口相匹配的环境变量,如下所示。
EXPOSE 4040
ENV ASPNETCORE_URLS=http://*:4040
文件的最后一行:ENTRYPOINT ["dotnet", "myapp.dll"]
然后使用 运行容器-p 4040:4040 这样它将端口映射到“外部”世界。
关于docker - 运行.net核心应用程序时如何在docker中进行端口映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453879/