我在dotnet core 2.2中开发了WebAPI服务。 我将Docker桌面用于带有Linux容器的Windows 我有这个docker-compose文件
version: '3.4'
services:
mongo:
image: mongo
ports:
- 27017:27017
mongo-express:
image: mongo-express
ports:
- 8088:8081
depends_on:
- mongo
MyWebApi:
image: MyWebApi
build:
context: .
dockerfile: MyWebApi/Dockerfile
ports:
- 80:80
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:5003
depends_on:
- mongo
以及用于我的Web api的此Dockerfile:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
#EXPOSE 443
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["TMSApi/TMSApi.csproj", "TMSApi/"]
COPY ["BusinessEntities/BusinessEntities.csproj", "BusinessEntities/"]
COPY ["TMSService/TMSService.csproj", "TMSService/"]
COPY ["TMSRepository/TMSRepository.csproj", "TMSRepository/"]
RUN dotnet restore "TMSApi/TMSApi.csproj"
COPY . .
WORKDIR "/src/TMSApi"
RUN dotnet build "TMSApi.csproj" -c Debug -o /app
FROM build AS publish
RUN dotnet publish "TMSApi.csproj" -c Debug -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "TMSApi.dll", "--environment=Development"]
在我的webapi appsettings.json中,我使用以下连接字符串:
mongodb://mongo:27017
在docker-compose文件中,我有3个服务:mongo,mongo-express和MyWebApi 当我使用localhost:8088时,mongo-express已连接到mongo。
但是当MyWebApi尝试连接到mongo服务时,我超时了。
您知道如何解决此问题吗?我想让它在docker容器中运行
我发现了一些有关该主题的最新文章,但没有结果...
谢谢
答案 0 :(得分:1)
我解决了问题
网络api尝试访问主机mongotms而不是mongo(我在stacktrace中看到了这一点)。在昨天早上的测试中,我将服务名称和设置从mongo更改为mongotms,然后构建了映像。当我改变主意并回滚所做的更改之后,请重新构建映像,但它保留了旧的mongo服务名称。
答案 1 :(得分:0)
您的docker-compose.yml
是正确的,并且您使用的网址也是正确的。我认为问题是– mongo
的启动时间比YourWebApi花费的时间更长,并且您只是尝试在尚未准备就绪的情况下连接到数据库。
depends_on
字段仅控制开始顺序,但不保证服务已准备就绪。
因此,请尝试在应用程序中添加一些超时。如果可行,只需引入wait-for
方法-等待远程套接字打开。这是解决问题的标准方法。