我在使用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"]
1条答案
按热度按时间k4emjkb11#
如果您已经使用webapi模板作为应用程序的起点,那么在Program.cs文件中有一些这样的代码
这使得Swagger仅在您的应用在开发环境中运行时可用。默认情况下,容器不被视为开发。
你已经在docker-compose文件中将
ASPNETCORE_ENVIRONMENT
设置为STAGING
。它需要为Development
,app.Environment.IsDevelopment()
才能返回true。如果你想保持你的环境为
STAGING
,你需要修改Program.cs,这样Swagger就可以使用了,要么让它测试STAGING
,要么完全删除if语句。如果您删除if语句,这将使Swagger始终可用,并且可能被某些人认为是一个安全风险。