Docker容器內(nèi)WS端口映射異常的實(shí)現(xiàn)
在Docker容器內(nèi)部署Websocket服務(wù)時出現(xiàn)了端口映射失敗,鏈接WS時始終訪問不通的情況。
代碼如下
var server = new WebSocketServer("ws://127.0.0.1:8888");
server.Start(socket =>
{
socket.OnOpen = () => //當(dāng)建立Socket鏈接時執(zhí)行此方法
{
};
socket.OnClose = () =>// 當(dāng)關(guān)閉Socket鏈接十執(zhí)行此方法
{
};
socket.OnMessage = message =>// 接收客戶端發(fā)送過來的信息
{
};
});
}將程序打包進(jìn)入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正常情況下應(yīng)該可以通過WS正常連接到服務(wù)上,但是當(dāng)服務(wù)在Docker內(nèi)正常運(yùn)行的時候,使用測試工具進(jìn)行測試連接發(fā)現(xiàn)一直連不通。

一開始分析以為是WS協(xié)議與Http協(xié)議不是同族協(xié)議,認(rèn)為需要單獨(dú)開啟Docker的Ws協(xié)議支持。但是后來查閱資料發(fā)現(xiàn)實(shí)際上WS和HTTP都是基于TCP的,所以立馬改變排查方向。
最后分析認(rèn)為可能是使用的127.0.0.1這類的LocalHost地址,導(dǎo)致在配置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 = () => //當(dāng)建立Socket鏈接時執(zhí)行此方法
{
};
socket.OnClose = () =>// 當(dāng)關(guān)閉Socket鏈接十執(zhí)行此方法
{
};
socket.OnMessage = message =>// 接收客戶端發(fā)送過來的信息
{
};
});思路是通過
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,最后用容器內(nèi)部的LocalIp創(chuàng)建對應(yīng)的WS連接。
改變代碼后生成新的Docker鏡像。啟動容器,測試連接正常。

到此這篇關(guān)于Docker容器內(nèi)WS端口映射異常的文章就介紹到這了,更多相關(guān)Docker WS端口映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker NFS volume創(chuàng)建與使用方式
這篇文章主要介紹了Docker NFS volume創(chuàng)建與使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
詳解使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像
本篇文章主要介紹了使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12
Docker部署Nginx 及Nginx的基本使用最佳實(shí)踐
Nginx是一個高性能的HTTP和反向代理服務(wù)器,廣泛應(yīng)用于Web服務(wù)、負(fù)載均衡和靜態(tài)資源托管等領(lǐng)域,這篇文章主要介紹了Docker部署Nginx 以及Nginx的基本使用,需要的朋友可以參考下2025-04-04
Docker安裝mysql教程以及解決mysqld: Can‘t read dir&nbs
本文詳細(xì)介紹了如何通過Docker來安裝和配置MySQL數(shù)據(jù)庫,包括拉取MySQL鏡像、啟動MySQL容器、配置MySQL、解決常見錯誤等步驟,提供了詳盡的命令和參數(shù)說明,幫助用戶順利完成MySQL的安裝和配置,文中還提到了如何處理MySQL容器啟動時遇到的“無法讀取目錄”2024-10-10
Mac系統(tǒng)上用Docker搭建lamp環(huán)境
這篇文章主要給大家介紹了Mac系統(tǒng)上用Docker如何搭建lamp環(huán)境,文章給大家介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12
Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

