在 C# 程序中无法连接到使用 Docker 启动的 RabbitMQ(使用 RabbitMQ.Client)

Eho*_*ret 4 c# rabbitmq docker .net-core

我按照文章启动了一个 RabbitMQ 容器:https : //docs.docker.com/samples/library/rabbitmq使用包括管理工具的图像

docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)
docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)

我可以通过http://localhost:8080访问管理工具

然后,我按照那篇文章创建了最基本的 C# 项目以与我的本地 RabbitMQ 实例进行通信:

docker container ls --all
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS
         NAMES
8a42bb749074        rabbitmq:3-management   "docker-entrypoint.s…"   8 hours ago         Up 8 hours          4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8080->15672/tcp   some-rabbit
Run Code Online (Sandbox Code Playgroud)

但不幸的是出现了以下错误:

using System.Globalization;
using RabbitMQ.Client;

namespace RabbitCSharp
{
    public static class Program
    {
        public static void Main(params string[] args)
        {
            var factory = new ConnectionFactory
            {
                HostName = "localhost"
            };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不太确定为什么 RabbitClient 无法通过 127.0.0.1:5672

任何的想法?

Eho*_*ret 7

看来我的容器端口 5672 没有映射到本地端口 5672。

我刚刚创建了另一个包含端口映射的容器,如本答案所示:

docker stop some-rabbit
docker commit some-rabbit some-rabbit-right
docker run -p 5672:5672 -p 8080:15672 -td some-rabbit-right
Run Code Online (Sandbox Code Playgroud)

或者直接运行一个新实例:

docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 8080:15672 rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)