我正在尝试将Docker与应用程序结合使用。除了Rabbit MQ,一切似乎都可以正常工作。因此,为了创建一个测试用例,我做了以下工作:
第1步-在Docker外部运行-按预期工作
1)创建一个简单的ASP.NET Core 2.1控制台应用程序:
using System;
using RabbitMQ.Client;
namespace DockerRabbitMQ
{
class Program
{
static void Main(string[] args)
{
RabbitMQConnect();
}
public static void RabbitMQConnect()
{
var factory = new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
};
var rabbit = factory.CreateConnection();
}
}
}
2)在本地PC上安装RabbitMQ,并通过浏览至http://localhost:15672来测试其是否正常工作。我看到了预期的管理门户,因此可以正常工作。
3)运行控制台应用程序。它可以按预期运行并完成。
第2步-在Docker中运行
1)右键单击控制台应用程序,然后选择:添加/容器编排支持。 DOCKERFILE和docker-compose已添加。
2)将以下内容添加到Docker Compose:
rabbit:
image: rabbitmq:3-management-alpine
hostname: rabbit
ports:
- "15672:15672"
- "5672:5672"
3)停止在本地PC上运行的Rabbit MQ服务(该服务是在第1部分的第1步中创建的)
4)将步骤1第1部分中的代码修改为:
HostName = "Rabbit",
5)在Visual Studio中运行Docker Compose。这是错误:
我相信我的问题类似于以下问题:RabbitMq refuses connection when run in docker。为什么会提示我这个错误?
更新
为了确保RabbitMQ在控制台应用程序之前启动;我将使用以下内容修改撰写文件:
depends_on:
- rabbitmq
更新2
我已尝试使用MVC应用程序而不是控制台应用程序按照上述说明进行操作(在步骤1中)。我将连接代码放在Startup构造函数中(仅用于测试),看到的是:
为什么我看到错误,为什么它试图连接到:92.242.132.15:5672? Docker Compose使MVC应用程序(和Rabbit Mw)看起来像这样:
version: '3.4'
services:
dockerrabbitmqmvc:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_HTTPS_PORT=44336
ports:
- "54258:80"
- "44336:443"
volumes:
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
rabbitmq:
image: rabbitmq:3-management-alpine
hostname: rabbit
ports:
- "15672:15672"
- "5672:5672"
expose:
- "15672"
- "5672"
答案 0 :(得分:0)
映射端口后,您必须在docker compose文件中将Rabbitmq的端口暴露在外部-如下所示
rabbit:
image: rabbitmq:3-management-alpine
hostname: rabbit
ports:
- "15672:15672"
- "5672:5672"
expose:
- 15672
- 5672