环境
服务端:群晖DSM 6.x,Docker
客户端:macOS,Chrome
症状
1. 登录二维码加载缓慢或一直不出现
2. 文件相关操作缓慢
即使登录成功后,列出文件,或者其他文件相关的操作,都很卡顿。
原因
这里只说个人遇到的,且假设不是CloudDrive本身的问题。
最有可能的原因,是CloudDrive容器使用了ipv6,某些未知原因(比如网络问题),通过ipv6访问阿里云盘的接口,会出现缓慢甚至无响应的情况。
怎样确认容器是否使用了ipv6?
群晖自带的Docker套件可以查看:
其他类似Portainer之类的工具同理。
通过命令行查看:
sudo docker inspect clouddrive | grep GlobalIPv6Address# 如果显示出来的 GlobalIPv6Address右边的值 不是空的,就表示使用了ipv6# "GlobalIPv6Address": "xxx:db8:1::22::c",# "GlobalIPv6Address": "xxx:db8:1::22::c",# 或者,你不确定容器所在的网络是不是默认的bridge,可以这样:sudo docker inspect clouoddrive# 这条命令会显示整个容器的信息,# 拉到最下面可以看到【"Networks": {】,# 这部分就是容器加入到的网络信息(可以加入多个网络),# 一般来说,如果创建容器时没特意指定,网络一般是bridge。# 如果是用docker-compose创建的,可能会有类似下面这个"clouddrive_default"网络,# 具体还是看怎么创建的。# 这里,我们只需要知道容器加入到了哪些网络,有没有被分配ipv6地址(GlobalIPv6Address)。
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"clouddrive_default": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"5415ae0efb",
"clouddrive"
],
"NetworkID": "b4154860018c607cc104eb921861f48d0b0efab0f88db2661669270bcf5617",
"EndpointID": "c6f0afd4284cb232b4ed5d5834cf5108d7f51c500f881f63132a88072b0747",
"Gateway": "172.22.0.1",
"IPAddress": "172.22.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "01:12:ab:12:01:02",
"DriverOpts": null
}
}
}
}
]
解决
解决方式1:容器使用ipv4网络
注:每张图下方都有同样效果的shell命令,实际上用命令也很容易处理。
1. 退出原网络

# 如果是shell,则是这样:
sudo docker network disconnect bridge clouddrive
2. 新建一个不开启ipv6的docker网络

# 如果是shell,则是这样:
# 就这么简单,默认是没开启ipv6的
sudo docker network create no-ipv6
3. 加入新网络

# 如果是shell,则是这样:
sudo docker network connect no-ipv6 clouddrive
解决方式2:容器优先使用ipv4解析域名
临时解决
修改容器的/etc/gai.conf配置文件。
sudo -i
# 复制文件到宿主机,在任意目录执行皆可
docker cp clouddrive:/etc/gai.conf ./gai-for-editing.conf
# 备份一下原始文件,是个好习惯
cp ./gai-for-editing.conf ./gai-original.conf
# 编辑文件
vim ./gai-for-editing.conf
# 打开文件后,输入以下指令(别忘了前面的英文冒号),以查看行号
:set number
# 然后输入以下指令,以定位到第54行(也可能不是第54行,反正找到一样内容的行就行)
:54
把第54行开头的**#**号删除
51 #
52 # For sites which prefer IPv4 connections change the last line to
53 #
54 precedence ::ffff:0:0/96 100
# 先按一下Esc键
# 然后输入以下指令,以保存和退出编辑
:wq
# 把修改后的文件覆盖到容器
docker cp ./gai-for-editing.conf clouddrive:/etc/gai.conf
# TODO 暂时不清楚修改`/etc/gai.conf`后,如何不重启容器就使其生效
# 所以暂时通过 重启容器 达到目的
docker restart clouddrive
完成以上步骤后,重新进入CloudDrive网页后台,看是否能正常加载二维码或者文件列表。
特殊情况需要恢复容器里的配置文件(如没问题请不要做此操作,略过即可):
# 开始时备份的文件就派上用场了
docker cp ./gai-original.conf clouddrive:/etc/gai.conf
docker restart clouddrive
如果正常的话,刚才的两个conf文件,有需要可以保留,做个备份,也可以删除:
rm ./gai-for-editing.conf ./gai-original.conf
持久化解决
在主机放一份修改好的gai.conf文件,然后在创建容器时,把该文件映射进容器即可。
详细步骤可以在另一篇TODO文章里查看。
by 上下九村士
转载请注明出处、链接
