Docker-Compose不显示Web内容

eoigrqb6  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(117)

我在使用docker容器的URL查看网页(swagger文档)的内容时遇到了一些问题。
我尝试了这些docker-compose命令:

> docker-compose build 

> docker-compose up -d

然而,我无法查看网页(或 Swagger -因为它是一个API)。
当我通过单击Run按钮从Visual studio运行Docker-Compose时,它可以工作,我可以访问swagger文档。但是,当我停止VS时,我无法通过导航到提供的URL来访问它。我如何解决这个问题?

- 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

我的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"]
k4emjkb1

k4emjkb11#

如果您已经使用webapi模板作为应用程序的起点,那么在Program.cs文件中有一些这样的代码

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

这使得Swagger仅在您的应用在开发环境中运行时可用。默认情况下,容器不被视为开发。
你已经在docker-compose文件中将ASPNETCORE_ENVIRONMENT设置为STAGING。它需要为Developmentapp.Environment.IsDevelopment()才能返回true。
如果你想保持你的环境为STAGING,你需要修改Program.cs,这样Swagger就可以使用了,要么让它测试STAGING,要么完全删除if语句。
如果您删除if语句,这将使Swagger始终可用,并且可能被某些人认为是一个安全风险。

相关问题