【发布时间】:2021-05-10 07:20:45
【问题描述】:
我想要完成的事情
我试图创建的最终结果是 Web API 不暴露给 localhost,但 Web MVC 网站可以与 Web API 通信,解析其结果。
背景
我是 Docker 世界的新手,当我学会了如何并行运行多个容器时,现在我正在尝试使用两个容器之间的网络来回溯我迄今为止所学的一切。
我创建了两个简单的、开箱即用的 .NET 5.0 应用程序:
1. Web API(通过HTTP, 使用端口7070)
- Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 7070
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["CreatingWebAPI/CreatingWebAPI.csproj", "CreatingWebAPI/"]
RUN dotnet restore "CreatingWebAPI/CreatingWebAPI.csproj"
COPY . .
WORKDIR "/src/CreatingWebAPI"
RUN dotnet build "CreatingWebAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "CreatingWebAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_URLS http://+:7070
ENTRYPOINT ["dotnet", "CreatingWebAPI.dll"]
-
launchSettings.json:
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"publishAllPorts": true,
"useSSL": true
}
- 还定义
Program.csCreateHostBuilder(string[] args)如下:
webBuilder.UseUrls("http://*:7070").UseStartup<Startup>();
2.显示来自 Web API 的解析表的 Web MVC
我目前面临的问题
通过 Visual Studio 运行 Web API 应用程序(使用 Docker 配置)工作得很好,我可以毫无问题地访问 localhost:<port>/swagger。问题是,在尝试使用 Docker CLI 重现相同的进程时 - 我无法访问 /swagger 接口,无论我尝试访问什么端口或端口。
附上一张 docker CLI 的照片,显示了两个容器的相同细节:
- 使用 Visual Studio 生成
- 使用
docker run --network personal-net --name api -p 50000:7070 creatingwebapi生成
我使用了不同的网络,并尝试一次只创建一个。我什至在这两个上都尝试了docker container inspect 来检查它们之间的任何差异,而没有看到任何不同。那么可能是什么问题呢?
【问题讨论】:
-
您找到解决方案了吗?我在这里也遇到了同样的问题
标签: visual-studio docker api networking containers