Docker容器内WS端口映射异常

2023-05-16

在Docker容器内部署Websocket服务时出现了端口映射失败,链接WS时始终访问不通的情况。
代码如下

  var server = new WebSocketServer("ws://127.0.0.1:8888");
            server.Start(socket =>
            {
                socket.OnOpen = () => //当建立Socket链接时执行此方法
                {
                };

                socket.OnClose = () =>// 当关闭Socket链接十执行此方法
                {
                };

                socket.OnMessage = message =>// 接收客户端发送过来的信息
                {
                };
            });
        }

将程序打包进入Docker容器后,配置DockerCompose

version: '3.4'
services:
  tdssserver:
    image: test
    restart: always
    container_name: test
    ports:
      - 8988:8888
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./appsettings.json:/app/appsettings.json

正常情况下应该可以通过WS正常连接到服务上,但是当服务在Docker内正常运行的时候,使用测试工具进行测试连接发现一直连不通。
.
.
在这里插入图片描述

.
.
一开始分析以为是WS协议与Http协议不是同族协议,认为需要单独开启Docker的Ws协议支持。但是后来查阅资料发现实际上WS和HTTP都是基于TCP的,所以立马改变排查方向。
最后分析认为可能是使用的127.0.0.1这类的LocalHost地址,导致在配置Docker映射的时候没法正确映射。
分析之后改变原来代码

            string localIP;
            using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
            {
                socket.Connect("8.8.8.8", 65530);
                IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                localIP = endPoint.Address.ToString();
            }

            FleckLog.Level = Fleck.LogLevel.Debug;
            var ws = "ws://" + localIP + ":" + planws;
            var server = new WebSocketServer(ws);
            server.Start(socket =>
            {
                socket.OnOpen = () => //当建立Socket链接时执行此方法
                {
                };

                socket.OnClose = () =>// 当关闭Socket链接十执行此方法
                {
                };

                socket.OnMessage = message =>// 接收客户端发送过来的信息
                {
                };
            });

思路是通过

         string localIP;
            using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
            {
                socket.Connect("8.8.8.8", 65530);
                IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                localIP = endPoint.Address.ToString();
            }

            FleckLog.Level = Fleck.LogLevel.Debug;
            var ws = "ws://" + localIP + ":" + planws;
            var server = new WebSocketServer(ws);

拿到Localip,最后用容器内部的LocalIp创建对应的WS连接。

改变代码后生成新的Docker镜像。启动容器,测试连接正常。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker容器内WS端口映射异常 的相关文章

随机推荐

  • 栈和队列——小猫钓鱼

    星期天A和B在一起玩扑克牌 xff0c 他们在玩一个古怪的扑克牌游戏 小猫钓鱼 游戏的规则是这样的 xff0c 将一副扑克牌平均分成两份 xff0c 每人拿一份 A先拿出手中的第一章牌放在桌上 xff0c 然后B也从手里拿出一张牌放在桌上
  • 二叉树与二叉树遍历

    树的介绍 你可能回文树和图有什么区别 xff1f 这个称之为树的东西和无向图差不多嘛 树其实就是不包含回路的连通无向图 图画的不好啊 xff0c 把箭头忽略一下将就看一下 xff0c 上面这个图左边就是一棵树 xff0c 而右边就是一个图
  • 广度优先搜索

    在前面的迷宫中 xff0c 我们使用了深度优先搜索的方法 xff0c 这里介绍一个新的方法来解决这个问题 广度优先搜索 xff0c 也称为宽度优先搜索 这里还是用一个二维数组来存储迷宫 xff0c 最开始的时候A也是在迷宫 0 0 处 xf
  • 图的遍历--深度优先搜索

    深度优先搜索和广度优先搜索 xff0c 其实都是针对图的变量而言的 简单来说 xff0c 图就是一些圆点和连接这些圆点的直线组成 例如上图的这五个定点和四条边 我们现在从1号顶点开始遍历整个图 xff0c 遍历指的就是把图的每一个顶点都访问
  • 暴力的枚举

    枚举算法又叫穷举算法 xff0c 光听名字就是能知道这个很暴力 有一个题 xff1a 3 6528 61 3 8256 xff0c 在两个方框里面填入相同的数字使得等式成立 你可能会觉得这个很简单 xff0c 3行代码就可以搞定 xff1a
  • 虚拟机的使用及基本命令

    虚拟机的使用 kiosk 64 foundation0 Desktop rht vmctl view desktop 显示虚拟机 kiosk 64 foundation0 Desktop rht vmctl start desktop 打开
  • 【虚拟机网络问题】关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总

    虚拟机网络问题 关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总 PS xff1a 本文仅是针对个人使用基于Ubuntu18 04上的Linux系统问题相关记录 xff0c 便于遇到此类问题快速解决 前言 本篇文章在参
  • sublime text 3+mingw搭建C++编译环境

    sublime text 3 43 mingw搭建C 43 43 编译环境 附上Sublime Text下载地址和MinGW下载链接 目录 sublime text 3mingw搭建C编译环境 目录安装MinGW系统配置环境 配置参数简单测
  • React 属性验证 propTypes

    React 组件可以根据预先设置进行属性验证 React prop验证使用 propTypes xff0c 它可以保证我们的应用组件被正确使用 xff0c React PropTypes 提供很多验证器 validator 来验证传入数据是
  • 【2023年最新版】Kali安装详细教程

    一 前期准备 kali镜像下载地址 前排提醒 xff1a 文末有绿色安装包领取 xff01 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0c 点击下一步 3 继续下一步
  • 七段码 蓝桥杯 python

    这题我是跟着别人的写出来的 xff0c 也就是暴力出来的 xff0c 真不清楚别人怎么将dfs bfs应用进去的 记得7根一根根亮的7中情况 xff0c 和7根都亮的1种情况 整题非常暴力 xff0c 即将2到6的所有组合写出来 xff0c
  • 矩池云上使用nohup和&让任务后台运行

    1 nohup 用途 xff1a 不挂断地运行命令 语法 xff1a nohup Command Arg amp 无论是否将 nohup 命令的输出重定向到终端 xff0c 输出都将附加到当前目录的 nohup out 文件中 如果当前目录
  • Ubuntu系统安装完nvidia显卡驱动后黑屏,不能进入系统

    昨天想看显卡 xff0c 更新了下驱动 xff0c 发现服务器重启进不去 步骤 1 开机按esc 进入 选项界面 2 进去以后选择一个括号里面带recovery mode的选项 3 然后它自动黑屏出现代码 xff0c 然后弹出一个选择框 x
  • 基于gazebo实现多机器人编队仿真(三)

    基于gazebo实现多机器人编队仿真 xff08 三 xff09 三角编队与一字编队的实现 前言原理简图代码实现虚拟坐标的发布跟随者消息接收 总结 前言 前文已经阐述了多机器人的编队模型实现与多辆小车跟随的实现 xff0c 本文以通过tf通
  • 10章 面向对象分析

    第10章 面向对象分析 10 1 面向对象分析的基本过程10 1 1 概述10 1 2 3个模型与5个层次 10 2 需求陈述10 2 1 书写要点10 2 2 例子1 储户和柜员交互2 储户和ATM交互 10 3 建立对象模型10 3 1
  • 音频文件格式转换wav->pcm

    一 启动Coolpro软件 二 将wav拖放到coolpro中 xff0c 如下图 xff0c 将左侧mono wav拖放到右侧coolpro 工作区 三 菜单打开 gt 另存为 xff0c 打开另存波形为 四 更改保存类型为pcm 五 点
  • 基于C++实现各种系统仿真模拟

    本文主要介绍各种有关动画模拟的模型 xff0c 直接进入正题 骨骼动画模拟 概念引入 对于网格体而言有不少实现动画的方式 直接对顶点进行操作也就是顶点动画 xff0c 适用于一些比较简单的植物摆动 水面波动效果 此外 xff0c 还有在两个
  • 【Docker系列】Swarm Internal Load Balancing 内部负载均衡

    Internal Load Balancing 内部负载均衡 创建一个mynet的overlay网络 xff0c 创建一个service vagrant 64 swarm manager docker network span class
  • 学习笔记 | Python 位运算符 &、|、^、~、<<、>>(图解)

    看完这篇文章 xff0c 你会学到 xff1a 位运算的用法 按位与 amp 按位或 按位异或 按位取反 按位左移 lt lt 按位右移 gt gt 转换进制的方法 什么是位运算 xff1f 程序中的数在计算机内存中都是以二进制的形式存在的
  • Docker容器内WS端口映射异常

    在Docker容器内部署Websocket服务时出现了端口映射失败 xff0c 链接WS时始终访问不通的情况 代码如下 span class token class name span class token keyword var spa