Docker-Compose 不显示网页内容

问题描述 投票:0回答:1

我在使用来自 docker 容器的 URL 查看网页内容(swagger 文档)时遇到一些问题。

我尝试了这些 docker-compose 命令:

> docker-compose build 

> docker-compose up -d

但是,我无法查看该网页(或大摇大摆 - 因为它是一个 API)。

当我通过单击“运行”按钮从

Docker-Compose
运行
Visual studio
时,它可以工作,并且我能够访问
swagger
文档。但是,当我停止 VS 时,我无法通过导航到提供的 URLS 来访问它。我该如何解决这个问题?

- Solution
  - My.Web
    - Dockerfile
  - My.Lib
  - Solution.sln
  - docker-compose.yml
  - docker-compose.dcproj
  - docker-compose.override.yml

我的文件夹结构如下所示:

我的Docker-Compose.yml如下所示:

version: '3.4'

services:
  my.web:
    container_name: my-9
    environment:
      - ASPNETCORE_ENVIRONMENT:STAGING
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - "8080:80"
      - "443:443" 
    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
    build:
      context: .
      dockerfile: My.Web\Dockerfile

My Dockerfile 如下所示:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app


ENV ASPNETCORE_URLS http://*:80
ENV ASPNETCORE_ENVIRONMENT=Development
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["My.Web/My.Web.csproj", "My.Web/"]
COPY ["My.Lib/My.Lib.csproj", "My.Lib/"]
RUN dotnet restore "My.Web/My.Web.csproj"
COPY . .
WORKDIR "/src/My.Web"
RUN dotnet build "My.Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "My.Web.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "My.Web.dll"]
c# docker docker-compose
1个回答
1
投票

如果您使用 webapi 模板作为您应用程序的起点,那么您的 Program.cs 文件中会有一些类似的代码

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

这使得 Swagger 只有在您的应用程序在开发环境中运行时才可用。默认情况下,容器不被视为开发。

您已在 docker-compose 文件中将

ASPNETCORE_ENVIRONMENT
设置为
STAGING
Development
需要是
app.Environment.IsDevelopment()
才能返回 true.

如果你想保持你的环境如

STAGING
,你需要改变Program.cs,这样Swagger就可用了。通过让它测试
STAGING
或完全删除 if 语句。

如果删除 if 语句,这将使 Swagger 始终可用,并且可能被某些人视为安全风险。

© www.soinside.com 2019 - 2024. All rights reserved.