鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ROS2 humble Docker 的端口映射问题

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    ros2 humble windows docker 端口号
    3
    4
    538
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • S
      shilongcn
      最后由 编辑

      同一个局域网中有两台电脑,需要ROS2通信:

      A windows 电脑:ROS2 humble Docker 镜像
      B Linux 电脑:ROS2 humble Docker 镜像

      问题是两个电脑中的ROS2 Docker 都需要映射哪些端口范围?如果采用Host模式的话,windows 电脑不支持 host模式,该如何处理?

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @shilongcn
        最后由 编辑

        @shilongcn 这个端口用到的可不止一个,想要完全正常通信,每个节点都有属于自己的port, 暂时没想到更好的办法,跟进

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        1 条回复 最后回复 回复 引用 0
        • 小伊小
          机器人小伊
          最后由 编辑

          在ROS2 humble Docker 的环境中,端口映射是确保ROS2节点之间能够通信的重要步骤。针对您提出的问题,我们可以从以下几个方面进行解答:

          一、ROS2 Docker 端口映射

          在ROS2中,节点间的通信主要依赖于ROS2的通信机制,包括服务(Services)、话题(Topics)、动作(Actions)等,这些通信机制通常使用TCP/IP协议。然而,Docker容器默认情况下并不允许外部网络直接访问容器内部的端口,因此需要通过端口映射来实现。

          对于ROS2 Docker镜像,通常需要映射的端口包括但不限于:

          • ROS2 Master的端口:ROS2 Master通常使用固定的端口(如11311)进行通信,但请注意,这个端口可能因ROS2版本或配置而异。
          • 其他ROS2节点可能使用的端口:这些端口取决于您的ROS2应用程序中节点之间的具体通信需求,可能包括用于话题、服务、动作等的端口。

          在Docker中设置端口映射通常是通过-p或--publish选项来完成的,例如:

          docker run -p 11311:11311 --name ros2_container your_ros2_image
          

          这条命令将容器内的11311端口映射到宿主机的11311端口上。

          二、Windows 电脑不支持 Host 模式

          在Windows环境下使用Docker Desktop时,确实不支持Host模式,因为Host模式仅适用于Linux宿主机。Host模式允许容器直接使用宿主机的网络栈,这在Windows上由于内核和架构的限制而无法实现。

          针对Windows电脑不支持Host模式的问题,您可以考虑以下几种解决方案:

          1. 使用Bridge模式:这是Docker Desktop在Windows上的默认网络模式。在Bridge模式下,Docker会为每个容器分配一个虚拟的IP地址,并通过Docker的网络桥接功能实现容器间的通信。您可以通过端口映射来使容器内的服务对宿主机或外部网络可见。

          2. 配置NAT或端口转发:在Windows宿主机上配置NAT规则或端口转发,将外部请求转发到Docker容器的相应端口上。这可以通过Windows的防火墙设置或第三方网络工具来实现。

          3. 使用Overlay网络:如果您的ROS2应用需要在多个Docker容器(可能分布在不同的宿主机上)之间通信,那么可以使用Docker的Overlay网络。Overlay网络允许跨多个Docker宿主机的容器进行通信,而无需担心网络地址冲突或路由问题。

          三、总结

          对于ROS2 humble Docker的端口映射问题,您需要根据ROS2应用的通信需求来确定需要映射的端口范围。对于Windows电脑不支持Host模式的问题,您可以通过使用Bridge模式、配置NAT或端口转发、或使用Overlay网络等方案来解决。

          请注意,以上信息基于当前ROS2和Docker的普遍实践,但具体实施时可能需要根据您的具体环境和配置进行调整。


          以上为生成回答,仅供参考~

          我是小伊,已接入ChatGpt,所有回复,仅供参考~

          1 条回复 最后回复 回复 引用 0
          • S
            shilongcn
            最后由 编辑

            @小鱼 大佬,Docker 端口映射问题有解吗

            1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @shilongcn
              最后由 编辑

              @shilongcn 这个端口用到的可不止一个,想要完全正常通信,每个节点都有属于自己的port, 暂时没想到更好的办法,跟进

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              1 条回复 最后回复 回复 引用 0
              • S shilongcn 将这个主题标记为已解决,在
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS