前段时间折腾媒体服务器的时候,把套件版的emby换成了docker版本,结果发现无法刮削元数据,就改用nastool刮,但是nastool对演员的刮削经常性拉胯,忍无可忍之下又粗暴的换成了套件版。
最近有点时间,准备解决下这个问题,于是做了几个测试。测试之前,先描述问题:不借助科学的方式,只通过修改hosts文件来解决emby无法刮削的问题。
测试方案一:更换系统,不用群晖,改用linux做测试。虚拟机装了ubuntu LTS最新版本,最小化安装,然后修改ubuntu系统的hosts文件,并且ping api.themoviedb.org确定hosts文件生效。然后手动安装docker环境,拉取lovechen/embyserver:latest镜像到本地,然后拍摄系统快照。至此,基本实验环境搭建完毕,准备进行下面几个测试。
1、部署emby,使用--network=bridge参数,不指定代理。部署完成后,emby果然无法正常刮削元数据。然后通过docker exec -it emby /bin/sh进入emby容器的命令行,修改容器hosts文件后,ping api.themoviedb.org,得到正确结果后,重新尝试刮削,结果还是无法正常刮削。
2、重新部署emby,改用--network=host参数,不指定代理。部署完成后,刮削元数据秒出!
3、再次重新部署emby,任然使用--network=bridge参数,这次多用一个-e /etc/hosts:/etc/hosts参数将ubuntu系统的hosts文件映射给emby容器,部署完成后,ping api.themoviedb.org,同样得到正确结果,尝试刮削,源数据同样秒出!
至此,在linux系统下,发现通过使用host网络或者映射系统的hosts文件,都可以解决emby容器不能刮削的问题。下面转战群晖。
为了方便,群晖使用虚拟机部署黑群的方式做测试,dsm版本7.2.1。全新安装一个dsm之后,先修改群晖的hosts文件,然后安装Container Manager,再拉取lovechen/embyserver:latest镜像到本地,最后拍摄系统快照,完成基本的系统搭建工作。后续任然按照前边1、2、3的顺序开始测试,结果,在ubuntu下顺利刮到源数据的两种方法,在群晖上通通无效!这就很神奇,在ssh下,无论是群晖还是emby容器,ping api.themoviedb.org都可以得到正确的结果,但就是无法刮削!
为了测试是否emby镜像在群晖上工作不正常,尝试部署的时候加入代理服务器参数,结果发现走代理服务器可以正常刮削!
证明了emby是没问题的,那么问题就还在群晖身上。打开群晖的网络设置,发现有全局代理,在此处设置代理后,先在Container Manager里找个镜像,发现之前提示无法获取标签的报错没了,也能正确的拉取到镜像的标签,说明代理服务器没问题,再打开emby的管理页面刷元数据,崩溃的是,竟然还是刮不出来!
继续换条路,本机hosts不生效,那就往上走,从路由器上解决,结果发现我的路由器不支持自定义hosts。。。于是,群晖安装虚拟机套件,新建一个openwrt虚拟机,然后设置openwrt的自定义hosts,之后将群晖的网关和dns设置为openwrt的ip,将群晖的hosts文件改回初始状态后,在ssh内ping api.themoviedb.org,获得正确的结果,说明旁路由生效,再去emby里刷,结果可以正确的获取元数据!
至此,折腾结束,虽然历经坎坷,但总算解决了docker版emby无法刮削元数据的问题。初步怀疑,要么是dsm本身的bug,要么是Container Manager的bug,导致容器访问网络的时候,系统的hosts文件居然不生效,只能在出口处想办法,如果路由器支持自定义hosts,那么就在路由器上配置,如果不支持,就只能像我一样通过旁路由的方式解决。