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

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

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

展开
收起
cuicuicuic 2024-03-20 16:16:53 38 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 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

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

    热门文章

    相关电子书

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