彻底解决群晖Docker终端机socket已关闭问题
这个界面大家应该不陌生吧,当你打开 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
部分中添加以下内容:
1 | proxy_set_headerUpgrade $http_upgrade; |
重启 httpd
1 | sudo synoservicecfg --restart nginx |
DSM 6.2.1 及以上
方案特点:不仅可以解决从外网访问群晖时出现的
socket已停止
的错误,对于局域网发生的socket已停止
错误可能同样生效。
从 DSM 6.2.1 开始,不再需要修改 Portal.mustache
文件,如果按照上面的方法,反而可能导致错误 。
可以参考这篇文章 Synology Docker 終端機出現 Socket 已關閉(https://snippetinfo.net/mobile/media/3090)
这个方法我自己没试过,但是我的一个朋友告诉我亲测有效,下图是他微信上发我的图。
第三方工具法
方案特点:这个方案不受网络的限制。但是需要安装
Portainer
,除非你本身就在用这个软件管理 docker,不然还要多学习一款软件的使用,不如群晖自带的 Docker 方便。
利用 Portainer
的 Exec Console
功能
完全不受浏览器的影响,即便 Google Chrome
已经出了 socket已停止
的错误,透过 Portainer
也完全可以正常使用
终极大法
方案特点:彻底解决
socket已停止
问题,不受网络的限制,不需要安装第三方软件,不需要设置反向代理。
更换浏览器是一种治标不治本的方法,我先描述下我遇到的现象:
- 在 Windows 台式机上,
Google Chrome
出了socket已停止
错误,换成Microsoft Edge
却是正常的; - 在 MacOS 笔记本上,
Google Chrome
和Safari
均正常;
上面的现象说明,群晖本身并没有问题,因为如果是群晖的问题,应该所有的浏览器都不行才对,所以问题一定是出在浏览器本身。
下面是以 Google Chrome
为例,详细描述了解决的过程,如果你只想知道结果,那就往下拉到最后吧。
首先想到的是
清除浏览数据
。但是操作完成后故障依旧;接着
重置权限
。点击地址栏前的不安全
–>网站设置
先 清除数据
,再 重置权限
,故障依旧;
- 清除
LocalStorage
。Google Chrome
浏览器中用快捷键Ctrl + Shift + I
打开开发者工具
,找到Application
在 Storage
中包含了 Local Storage
、Session Storage
和 Cookies
挨个清理,先清 Local Storage
,选中 http://192.168.0.199:5000/
右键 Clear
,故障依旧;
接着清 Session Storage
,方法跟上一步一样,故障还是依旧;
最后清 Cookies
,方法跟上一步一样,清完后需要重新登录
终于恢复正常了
比较遗憾的是没有确定到具体的键值。
参考文档
HomeAssistant设置https访问后的问题 | 老苏的blog
地址:https://laosu.ml/2020/08/09/HomeAssistant%E8%AE%BE%E7%BD%AEhttps%E8%AE%BF%E9%97%AE%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91/Synology Docker 終端機出現 Socket 已關閉 | 老洪的 IT 學習系統
地址:https://snippetinfo.net/mobile/media/3090