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

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

到此這篇關(guān)于Docker容器內(nèi)WS端口映射異常的文章就介紹到這了,更多相關(guān)Docker WS端口映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker NFS volume創(chuàng)建與使用方式
這篇文章主要介紹了Docker NFS volume創(chuàng)建與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
詳解使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像
本篇文章主要介紹了使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12
詳解docker pull 下來(lái)的鏡像文件存放的位置
本篇文章主要介紹了詳解docker pull 下來(lái)的鏡像文件存放的位置,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04
docker端口映射及外部無(wú)法訪問(wèn)問(wèn)題
這篇文章主要介紹了docker端口映射及外部無(wú)法訪問(wèn)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Docker部署Nginx 及Nginx的基本使用最佳實(shí)踐
Nginx是一個(gè)高性能的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ì)介紹了如何通過(guò)Docker來(lái)安裝和配置MySQL數(shù)據(jù)庫(kù),包括拉取MySQL鏡像、啟動(dòng)MySQL容器、配置MySQL、解決常見錯(cuò)誤等步驟,提供了詳盡的命令和參數(shù)說(shuō)明,幫助用戶順利完成MySQL的安裝和配置,文中還提到了如何處理MySQL容器啟動(dòng)時(shí)遇到的“無(wú)法讀取目錄”2024-10-10
Mac系統(tǒng)上用Docker搭建lamp環(huán)境
這篇文章主要給大家介紹了Mac系統(tǒng)上用Docker如何搭建lamp環(huán)境,文章給大家介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

