Docker Compose环境下.NET 8容器间无法发起HTTPS调用的问题求助
Docker Compose环境下.NET 8容器间无法发起HTTPS调用的问题求助
我在Windows的Visual Studio中创建了一个名为ApiOne的.NET 8项目,启用了Linux容器和HTTPS,并添加了容器编排。之后我又向同一个解决方案中添加了第二个.NET 8项目ApiTwo,同样启用了Linux容器支持和编排。我可以从ApiOne向ApiTwo发起HTTP请求,但容器间的HTTPS请求总是失败。
ApiOne Dockerfile
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. # Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. # For more information, please see https://aka.ms/containercompat # This stage is used when running from VS in fast mode (Default for Debug configuration) FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base WORKDIR /app EXPOSE 8080 EXPOSE 8081 # This stage is used to build the service project FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["ApiOne/ApiOne.csproj", "ApiOne/"] RUN dotnet restore "./ApiOne/ApiOne.csproj" COPY . . WORKDIR "/src/ApiOne" RUN dotnet build "./ApiOne.csproj" -c %BUILD_CONFIGURATION% -o /app/build # This stage is used to publish the service project to be copied to the final stage FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./ApiOne.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false # This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration) FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "ApiOne.dll"]
ApiOne launchSettings.json
{ "profiles": { "http": { "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, "applicationUrl": "http://localhost:5116" }, "https": { "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, "applicationUrl": "https://localhost:7088;http://localhost:5116" }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "Container (Dockerfile)": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", "environmentVariables": { "ASPNETCORE_HTTPS_PORTS": "8081", "ASPNETCORE_HTTP_PORTS": "8080" }, "publishAllPorts": true, "useSSL": true } }, "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:22890", "sslPort": 44373 } } }
ApiOne和ApiTwo的配置文件内容类似。
docker-compose.yml
services: apione: image: ${DOCKER_REGISTRY-}apione build: context: . dockerfile: ApiOne\Dockerfile apitwo: image: ${DOCKER_REGISTRY-}apitwo build: context: . dockerfile: ApiTwo\Dockerfile
docker-compose.override.yml
services: apione: environment: - ASPNETCORE_ENVIRONMENT=Development - ASPNETCORE_HTTP_PORTS=8080 - ASPNETCORE_HTTPS_PORTS=8081 ports: - "8080" - "8081" volumes: - ${APPDATA}/Microsoft/UserSecrets:C:\Users\ContainerUser\AppData\Roaming\Microsoft\UserSecrets:ro - ${APPDATA}/ASP.NET/Https:C:\Users\ContainerUser\AppData\Roaming\ASP.NET\Https:ro apitwo: environment: - ASPNETCORE_ENVIRONMENT=Development - ASPNETCORE_HTTP_PORTS=8080 - ASPNETCORE_HTTPS_PORTS=8081 ports: - "8080" - "8081" volumes: - ${APPDATA}/Microsoft/UserSecrets:C:\Users\ContainerUser\AppData\Roaming\Microsoft\UserSecrets:ro - ${APPDATA}/ASP.NET/Https:C:\Users\ContainerUser\AppData\Roaming\ASP.NET\Https:ro
我感觉这应该是HTTPS证书相关的问题。我进入了两个容器的文件系统,检查了目录C:\Users\ContainerUser\AppData\Roaming\ASP.NET\Https,发现ApiOne.pfx和ApiTwo.pfx这两个证书文件都存在于挂载的卷中。而且我用Postman分别向ApiOne和ApiTwo发起HTTPS请求时,都能正常调用。我到底漏掉了什么配置?
备注:内容来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

