我寫了一個小演示來了解微服務和 DDD。這是檔案結構。
├───.dockerignore
├───docker-compose.yml
├───Dockerfile
├───MicroserviceDemo.sln
├───MicroserviceDemo.Application
│ ├───MicroserviceDemo.Application.csproj
│ └───...
├───MicroserviceDemo.Domain
│ ├───MicroserviceDemo.Domain.csproj
│ └───...
└───MicroserviceDemo.Infrastructure
├───MicroserviceDemo.Infrastructure.csproj
└───...
如果我運行 docker compose,容器運行良好,但導航到localhost:5000/swagger.
我嘗試在應用程式目錄中創建另一個 dockerfile(使用 VS docker 工具),這導致運行該容器時行為正常(我得到了 swagger ui)。該應用程式在沒有直接在我的本地運行 VS 的情況下進行除錯時也可以正常作業)。
我不確定問題出在哪里。
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MicroserviceDemo.Application/MicroserviceDemo.Application.csproj", "MicroserviceDemo.Application/"]
COPY ["MicroserviceDemo.Infrastructure/MicroserviceDemo.Infrastructure.csproj", "MicroserviceDemo.Infrastructure/"]
COPY ["MicroserviceDemo.Domain/MicroserviceDemo.Domain.csproj", "MicroserviceDemo.Domain/"]
RUN dotnet restore "MicroserviceDemo.Application/MicroserviceDemo.Application.csproj"
COPY . .
WORKDIR "/src/MicroserviceDemo.Application"
RUN dotnet build "MicroserviceDemo.Application.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MicroserviceDemo.Application.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MicroserviceDemo.Application.dll"]
碼頭工人-compose.yml
version: '3'
services:
infrastructure:
image: "mcr.microsoft.com/mssql/server"
container_name: microservice-demo-database
restart: always
environment:
SA_PASSWORD: "Your_password123"
ACCEPT_EULA: "Y"
ports:
- 5432:5432
rabbitmq:
image: rabbitmq:3-management
container_name: microservice-demo-rabbitmq
ports:
- 5672:5672
- 15672:15672
environment:
- RABBITMQ_DEFAULT_USER=user
- RABBITMQ_DEFAULT_PASS=password
api:
image: microservice-demo:latest
build: .
container_name: microservice-demo-api
restart: always
depends_on:
- infrastructure
- rabbitmq
ports:
- 5000:80
- 5001:443
uj5u.com熱心網友回復:
默認情況下,Swagger 僅在開發模式下可用。默認情況下,容器中的應用程式處于生產模式。
要在開發模式下運行,您可以將 ASPNETCORE_ENVIRONMENT 變數設定為 Development 并且 Swagger 應該可用。
api:
image: microservice-demo:latest
build: .
container_name: microservice-demo-api
restart: always
depends_on:
- infrastructure
- rabbitmq
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- 5000:80
- 5001:443
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/416296.html
標籤:
