【发布时间】:2020-03-06 23:53:54
【问题描述】:
我在 Stack Overflow 上尝试了几种可能的解决方案,但似乎没有什么对我有用。
我正在使用 RabbitMQ 开发微服务。该解决方案包含多个项目并且运行没有任何问题,但是一旦我使用docker-compose 选项构建项目,Visual Studio 就会引发以下异常:
RabbitMQ.Client.Exceptions.BrokerUnreachableException ExtendedSocketException:连接被拒绝 127.0.0.1:5672
在我的解决方案中,我有三个项目通过 RabbitMQ 相互通信。
以下是我的 YAML 文件的代码。
我的 docker-compose.yaml:
version: '3.4'
services:
rabbitmq:
hostname: webnet
image: rabbitmq:3.7.2-management
ports:
- "15672:15672"
- "5672:5672"
networks:
- webnet
sql-server-db:
container_name: sql-server-db
image: microsoft/mssql-server-linux:2017-latest
ports:
- "1433:1433"
environment:
SA_PASSWORD: "customerdbalten@123"
ACCEPT_EULA: "Y"
networks:
- webnet
myproject.simulation.api:
image: ${DOCKER_REGISTRY-}myprojectsimulationapi
build:
context: .
dockerfile: myproject.Simulation.Api/Dockerfile
links:
- rabbitmq
ports:
- '5000'
networks:
- webnet
myproject.updateservice.api:
image: ${DOCKER_REGISTRY-}myprojectupdateserviceapi
build:
context: .
dockerfile: myproject.updateservice.Api/Dockerfile
links:
- rabbitmq
- sql-server-db
ports:
- '5050'
networks:
- webnet
myproject.web:
image: ${DOCKER_REGISTRY-}myprojectweb
build:
context: .
dockerfile: MyProject.Web/Dockerfile
links:
- rabbitmq
ports:
- '5001'
networks:
- webnet
networks:
webnet:
driver: bridge
我的 Docker 文件:
我的 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
MyProject.UpdateService.Api/MyProject.UpdateService.Api.csproj MyProject.UpdateService.Api/
COPY MyProject.Common/MyProject.Common.csproj MyProject.Common/
RUN dotnet restore MyProject.UpdateService.Api/MyProject.UpdateService.Api.csproj
COPY . .
WORKDIR /src/MyProject.UpdateService.Api
RUN dotnet build MyProject.UpdateService.Api.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish MyProject.UpdateService.Api.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.UpdateService.Api.dll"]
我还创建了另一个简单的解决方案,只有两个项目——发送者和接收者——使用 RabbitMQ。此解决方案在docker-composeing 时会引发相同的异常,否则它只会运行。 YAML 文件只有自动生成的代码。
【问题讨论】:
-
你需要在你的应用程序中更新你的连接字符串,它不应该指向
127.0.0.1:5672,它应该是rabbitmq:5672。请记住localhostin contains 表示此容器,而不是 rabbitmq 容器。更好地展示您的连接线。 -
in service with in this
docker-compose如果想和rabbitmq连接应该像rabbitmq:5672,记住在service to service通信中你必须使用service name或者container name来连接。 -
没错,您必须使用
rabbitmq:5672而不是127.0.0.1:5672。是的,请更新appsettings.json file: Hostname: rabbitmq:5672 -
嗨,@daudnadeem!实际上,我对 Dockerization 很陌生,所以我的问题很可能没有完全的意义,因为我也不确定我是否以正确的方式创建 docker。那么您能否让我知道问题的哪一部分不清楚,以便我向您解释?
-
@halfer,没问题,亲爱的。那个时候我已经纠正了自己。谢谢你再次提醒我。\
标签: docker docker-compose rabbitmq asp.net-core-2.2