我运行了这个rabbitMQ docker容器:
version: '3'
services:
rabbitmq:
image: rabbitmq:3-management-alpine
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
ports:
- 5672:5672
- 15672:15672
volumes:
- ./.rabbitmq/data/:/var/lib/rabbitmq
- ./.rabbitmq/log/:/var/log/rabbitmq
而且运行良好。
我有一个nodejs脚本put_message_into_queue.ts
,它连接到它并尝试将一些消息放入队列中。
我在另一个脚本中也有一些工作者代码,它使用同一队列中的消息。
当我检查管理控制台时:
我可以看到两个连接,对应于运行不同进程的两个脚本。如果我单击其中一个连接:
关于标题:Connection 172.21.0.1:56526 -> 172.21.0.2:5672
:
172.21.0.1: what does this address mean?
56526:此端口是什么意思?
172.21.0.2: this should be the ip address of the rabbitMQ docker container
5672:这是在docker-compose中指定的端口172.21.0.1:56526
和我的一个运行脚本有什么关系?当我运行这个脚本时,它不会在任何端口上运行。那么172.21.0.1:56526
是什么呢?
1条答案
按热度按时间pqwbnv8z1#
这些连接来自于Docker之外的地方可能是主机上的另一个进程或者是完全不同的系统。很难说更多。
在TCP中,连接的两端都有一个IP地址和一个端口号。如果你连接到Stack Overflow,你会把HTTP请求发送到某个地址(对我来说,看起来像151.101.1.69)和端口443,但是响应数据会返回到你的本地IP地址和一个随机分配的端口。RabbitMQ的有线协议也使用TCP。端口56526是从客户机随机分配的端口,在非容器RabbitMQ控制台中您会看到相同的随机端口。
Docker设置了一个 * 网络地址转换 * 层来提供容器专用IP地址。在您的示例中,Docker网络看起来像是IPv4网络172.21.0.0/16,RabbitMQ代理可以任意访问该网络。典型的约定是面向外部的路由器拥有网络上的第一个地址,Docker也会设置此地址;在172.21.0.1本例中,www.example.com是与主机对应的地址。
Docker端口Map在内部工作的方式往往会丢失实际的源地址。在第一个Map端口号上有一个从某个地方到主机的连接,以及一个从Docker到第二个端口号的连接,但这两个连接会丢失直接关联。这偶尔会对诊断和不太安全的IP ACLing造成影响;例如参见X1 E0 F1 X。
这些部分是:
ports:
编号