暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

彻底解决群晖Docker终端机socket已关闭问题

各种折腾 2021-04-26
12117

这个界面大家应该不陌生吧,当你打开 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;