这个界面大家应该不陌生吧,当你打开 Docker 容器的 终端机
时,提示socket已停止
的错误,而且要命的是,所有容器都不能使用 终端机
了,如果你在网上搜索解决方案,基本上就 3 种:
第一种简单粗暴,直接换浏览器,我也试成功过,比如
Google Chrome
出问题了,换成Microsoft Edge
就 OK 了;如果是 MacOS,换成Safari
也一样能解决;第二种利用反向代理实现
WebSocket
通讯;第三种是利用第三方工具;
其实这几种方法都是正确的,只是网上语焉不详,并没有对场景进行详细的描述,导致了大家没有找到适合的方法,所以认为这些方法都是扯淡。
其实遇到 socket已停止
的错误分两种情况:
一种是本地(局域网)模式下出现这种错误
另一种是远程(互联网)模式下出现这种错误
其他属于上面两种情况的组合,比如远程、本地都出现这种报错,又或者一端出现了另一端正常
解决方案
反向代理法
DSM 6.2.1 以下
方案特点:可以解决从外网访问群晖时出现的
socket已停止
的错误,但是对于局域网发生的socket已停止
错误无能为力。
这个版本的群晖自带的 nginx 不支持 websocket ,Synology DSM 6 反向代理的配置修复程序项目地址:https://github.com/orobardet/dsm-reverse-proxy-websocket
WinSCP
连接群晖后打开 /usr/syno/share/nginx/Portal.mustache
切记,修改前先备份,先备份,先备份,重要的事情总是要说三遍,备份是一种好习惯
在 location
部分中添加以下内容:
proxy_set_headerUpgrade $http_upgrade;
proxy_set_headerConnection "upgrade";
proxy_read_timeout 86400;