docker - RabbitMq - Docker-compose - 如何修复“连接被拒绝 127.0.0.1:5672”异常
问题描述
我已经在 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。此解决方案在 ing 时会引发相同的异常docker-compose
,否则只会运行。YAML 文件只有自动生成的代码。
解决方案
从讨论中,我们发现 rabbitMQ 容器没有运行,因为主机上已经运行了 rabbitMQ 服务。
您有两个选择,停止主机 RabbitMQ 服务,然后尝试连接 rabbitMQ 容器。
Hostname: rabbitmq:5672
或者,如果您想连接 Host RabbitMQ 服务,那么您可以使用
Hostname: host.docker.internal
#or
Hostname: HOST_IP
我想从容器连接到主机上的服务
主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始,我们的建议是连接到特殊的 DNS 名称“host.docker.internal”,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker Desktop for Windows 之外的生产环境。
网关也可以通过gateway.docker.internal.
推荐阅读
- mysql - 触发器适用于已经触发的记录mysql
- javascript - 阻止侦听器的 Firestore 安全规则
- javascript - JavaScript & Ajax 无需刷新 CRUD
- api - 带有自动播放视频的 Cycle2 滑块
- javascript - 如何在影子 DOM 中引导 Angular?
- django - Python Django 执行独立的间隔任务
- user-defined-functions - 在一个语句中将 UDF 应用于另一个语句
- css - Css如何从:悬停和正常转换,但在页面加载时更改值而不转换
- reactjs - 我们可以在反应组件中访问代理目标吗?
- java - 从扩展抽象类模拟 @Autowired 成员