开发者社区 > 云原生 > 云消息队列 > 正文

RocketMQ为什么正常启动容器后在本地能通过127.0.0.1+端口号的方式访问容器呢?

RocketMQ中mac上安装docker后启动docker服务docker是没有创建默认的docker0虚拟网桥,mac宿主机无法ping通docker分配给容器的ip,那为什么正常启动容器后在本地能通过127.0.0.1+端口号的方式访问容器呢?

展开
收起
真的很搞笑 2024-03-20 16:16:53 101 0
2 条回答
写回答
取消 提交回答
  • 当您使用 Docker 或其他容器运行时工具启动RocketMQ容器时,通常会指定宿主机(本地机器)与容器内部服务端口之间的端口映射。例如,您可以使用 -p 参数将容器内部的RocketMQ服务端口(如9876、10911等)映射到宿主机的某个端口。

    2024-03-24 18:10:18
    赞同 展开评论 打赏
  • 将军百战死,壮士十年归!

    在Mac上使用Docker时,Docker不是通过传统的docker0虚拟网桥与宿主机进行通信的。在Mac上,Docker Desktop使用HyperKit虚拟化技术以及一个名为docker.for.mac.localhosthost.docker.internal的特殊DNS条目来实现宿主机与容器之间的网络通信。

    当您在Mac上运行Docker容器,并且容器中运行了一个Web服务监听在某个端口上,即使宿主机不能直接通过IP地址ping通容器,但由于Docker Desktop做了网络代理和端口映射,宿主机仍然可以通过localhost或宿主机IP地址加上映射的端口来访问容器内部的服务。

    这是因为Docker Desktop在后台配置了一种网络模式,允许容器对外发布的端口通过端口映射技术直接暴露给宿主机。例如,如果您在运行容器时指定了-p 8080:80,这意味着容器内部的80端口被映射到了宿主机的8080端口,因此在宿主机上访问http://localhost:8080就可以访问到容器内部运行的应用服务。

    至于为何不能通过ping命令从宿主机直接ping通容器内部IP,是因为Docker在Mac上的网络配置与Linux下的传统bridge网络有所不同,它并不支持所有类型的网络通信,特别是在默认配置下,ICMP(ping命令)通常会被禁止。然而,这并不会影响通过TCP/IP协议栈进行的HTTP、HTTPS或其他服务端口的通信。

    2024-03-22 16:48:14
    赞同 1 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 热门讨论

    热门文章

    相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载