我正在尝试对我的.Net API进行dockerize,在用它创建容器后,我似乎无法访问它;插座挂断";错误我相信这与我使用的端口有关,尽管我不知道如何修复它。以下是我可以收集的所有信息。
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app
COPY WebAPI.csproj .
RUN dotnet restore "WebAPI.csproj"
COPY . ./
RUN dotnet publish "WebAPI.csproj" -c Release -o /publish
RUN dotnet build
FROM build AS final
WORKDIR /app
COPY --from=build /publish .
EXPOSE 5000
ENTRYPOINT ["dotnet", "WebAPI.dll"]
命令:
docker build -t webapi:latest .
docker run -p 5000:5000 webapi:latest
邮差代理:
127.0.0.1:5000
p.S我尝试过用多种方式更改端口,更改邮递员的代理设置,但似乎什么都不起作用
Microsoft已在aspnet映像中将环境变量ASPNETCORE_URLS
设置为http://+:80/
,这将使您的应用程序侦听端口80。
所以你的运行命令应该像这个一样映射端口80
docker run -p 5000:80 webapi:latest
然后您的API将在http://localhost:5000/
请注意,Swagger仅在应用程序以开发模式运行并且Docker环境不被视为开发时可用。因此,默认情况下,Swagger将不可用。
更新:由于我没有您的程序源代码,我创建了以下运行dotnet new
的Dockerfile来创建一个新的模板webapi项目。
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
RUN dotnet new webapi -n WebAPI -o .
RUN dotnet publish -c Release -o /publish
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /publish .
CMD ["dotnet", "WebAPI.dll"]
然后,我运行以下命令来构建、运行和测试容器
docker build -t test .
docker run --rm -d -p 5000:80 test
curl http://localhost:5000/WeatherForecast
我从API中得到了预期的结果。