让Docker容器优雅的实现自动更新,极空间NAS部署『Watchtower』

让Docker容器优雅的实现自动更新,极空间NAS部署『Watchtower』

哈喽小伙伴们好,我是Stark-C~

折腾Docker可以说是NAS玩家最大的乐趣之一,不过很多小伙伴可能部署成功之后就不会再管它了,殊不知的是,Docker容器其实就和我们的手机APP一样,也会不停地更新与升级。

传统的Docker容器更新其实有些繁琐,还需要手动停止容器,然后重新拉取最新镜像,在对着原路径再配置一次,最后重启容器。虽说步骤不多,但是如果自己NAS上的Docker容器很多的话,操作起来还是很费功夫的。

对于极空间我很早就分享了它上面一个很好用的Docker更新神器『docker copilot』,不过不能自动更新略有遗憾,今天就为大家分享一种逼格更高(全程命令化操作),可以全自动监控和更新Docker容器的神器『Watchtower』

关于Watchtower

🔺Watchtower是一个免费开源项目,主要用于自动更新运行中的 Docker 容器。它可以监控容器中的镜像,如果检测到更高版本的镜像可用,Watchtower 会自动拉取最新的镜像并重新启动容器,以确保使用的是最新的版本。

它主要的作用为:

  • 自动检查更新:定期或者随时检查托管的容器镜像,以发现是否有新的版本。

  • 镜像拉取:当发现新的镜像版本时,自动拉取最新的镜像并自动配置。

  • 容器重启:在拉取完新镜像后,自动停止并重启相应的容器,以应用更新。

  • 配置灵活性:支持通过环境变量进行多种配置,用户可根据需求自定义更新策略(比如指定更新,全部更新等)。

它的工作原理为:

Watchtower在运行之后会监视NAS中正在运行的容器以及相关的镜像(可以是全部也可以是我们指定的),当它发现运行容器中的镜像已经有变动并需要更新的时候,它会以发送 SIGTERM 信号的方式,先结束运行中容器运行,然后会根据我们设定的指令(其实就是一条命令行),用该容器镜像最开始相同的参数自动重新启动相应的容器,甚至包括Watchtower本身,就是这么简单!

还不理解?你就把它看作是我们手机上的应用市场,而Docker容器就是手机上的APP,应用市场实际上也是一个APP,但是通过它可以更新手机上所有的APP。

Watchtower部署

🔺Watchtower的部署需要我们开启极空间的SSH,位置在“系统设置--远程协助/SSH”。开启之后还需要使用SSH终端工具连接到极空间,具体的连接方案请看我之前极空间SSH教程的专题介绍。

🔺连接成功之后,需要输入命令“sudo -i”,再输入一遍管理员的密码(输入密码没有显示,输入完成直接回车即可),切换到root账户(提升操作权限)。

然后这里需要说明的是,Watchtower是根据不同的命令操作来执行不同的更新效果,也就是说,我们需要根据自己的需求来执行不同的命令。下面我一个一个的来讲解。

需求一:快速更新全部容器(不推荐)

这个是Watchtower默认的命令(原始命令),在这个命令下,我们可以一键快速部署Watchtower程序并更新所有NAS上的Docker容器。

🔺命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

我为什么不推荐这种方案?首先并不是最新版本就是最好的,可能会导致不稳定(和我们手机版本更新是一个道理),另一个就是,如果说你NAS里面部署的Docker容器非常多,特别是有Docker Compose堆栈容器,它们之间都是相互关联的,如果你更新到不同的版本,极大可能会出问题。

所以,这里建议大家【指定更新容器】,也就是说,只更新自己需要更新的。

需求二:指定更新容器

🔺在更新指定的容器前,我们需要知道我们需要更新容器的名字。输入命令【docker ps】,在后面“NAMES”下面便是我们NAS中运行的所有Docker容器的名字。

🔺我这里以更新portainer为例来作演示,它的命令为:

docker stop watchtower #因为我前面已经部署运行了watchtower容器,所以这里先要“停止watchtower容器”,首次操作这步忽略(下同)

docker rm watchtower #接着“删除watchtower容器”,首次操作这步忽略(下同)

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower portainer #运行容器并更新portainer

简单来说,我们需要在命令后面加上想要更新的容器名字即可。并且它支持一次更新多个容器,我们只需要继续往后加上容器名字,中间用空格隔开即可。

需求三:指定更新容器的同时删除旧镜像

我们使用Docker的时间越长,更新Docker的次数越多,它之前的旧镜像文件还占据着我们NAS的空间。我们可以在使用watchtower更新Docker容器的时候加上“ --cleanup ”的参数选项,就能在更新容器的同时删除之前的旧镜像。

🔺这里依然以portainer为例,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup portainer

需求四:指定更新容器的频率(时间)

watchtower默认是24小时监控一次,如果有更新就会自动更新。不过我们可以根据自己的需求自定义它监控和更新的时间频率,这里有两种方案:

🔺一个方案是设置更新时间间隔,单位为秒,加入的命令参数为“ --interval ”。比如说我们需要设定每一个小时检查一次portainer的更新,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --interval 3600 portainer

【--interval 3600】就是我们指定的更新频率,一小时为3600秒。

🔺另一个方案是置定时检测,格式为 6 字段 Cron 表达式,加入的命令参数为“ --schedule ”。比如我们需要每天凌晨 3 点种检查portainer的更新,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --schedule “0 0 3 * * *” portainer

【--schedule “0 0 3 * * *”】就是我们指定的更新频率,每天凌晨 3 点种的6 字段 Cron 表达式为“0 0 3 * * *”(自己找网站转换即可)。

需求五:手动更新

可能有些小伙伴只是想更新一次容器,然后让watchtower退出,下次更新再次打开即可。虽说可以直接在Docker管理器中手动停止watchtower容器,其实我们也可以直接通过加入命令参数“ --run-once ”来搞定。

🔺比如说我需要更新一次 portainer ,并且更新好之后退出watchtower。它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once portainer

Watchtower体验

🔺说了那么多,我现在以我NAS上的实际Docker容器为例为大家演示一次。比如说同样是神器的Lucky,目前我安装的版本为2.11.1,现在的最新版本为2.13.4。

🔺我目前的需求就是更新Lucky容器的同时删掉旧容器,完成之后Watch­tower退出。按照前面所说的命令格式,它的完整命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once lucky

🔺搞定之后我们再次打开Lucky容器,可以看到Lucky的版本已经更新到最新的2.14.0,甚至比它自己给出的版本还要高~~

🔺并且Watch­tower也已经退出,就是这么简单~!

最后

Watchtower 的自动化、灵活性、安全性和易用性使其成为一个非常实用的 Docker 容器管理工具,可以说是NAS必装神器之一。但是,这里需要再次强调的是,并不是所有的 Docker 容器都适合第一时间更新,因为有些Docker容器是求稳,有些是需要特定功能。举个最简单的例子,nastools为什么要2.9.1版本,而不让它更新到最新版本?懂的都懂~

极空间最近的更新步伐明显加快,就比如说最近一次的更新除了常规的系统修复和优化,还带来了大家期待已久的新功能。比如说:

  • AI字幕:也就是智能字幕生产功能,调用本地AI计算能力,生产字幕文件,支持中文、英语、日语等多种声音的视频;

  • DDNS功能:现在我们可以使用自己的个性域名直接访问极空间,支持自动添加DNS记录、泛域名解析、支持IPv6,可选择阿里、腾讯、花生壳三家服务提供商;

  • 子账号容量控制:管理员可以手动设定每个子账号在每个存储池可以使用的空间,存储容量分配更灵活方便;

  • 原画转码:观影爱好者期待已久,现在终于可以直接在APP端(手机&电视)直接观看原盘无损的电影或纪录片了;

  • APP端小窗播放:就像目前市面上的流媒体APP一样,极空间手机端的APP也支持小窗播放功能,观看视频更方便了。

后续我也会单独出更详细的教程,为大家分享这些新功能的介绍和玩法。

还有就是,极空间也在本月正式发布了高性能四盘位NAS私有云Q4与随身智能魔盒T2S两款新品,继续为用户提供更易用、更智能、更安全、更强大的私有云产品与智能存储解决方案。如果你近期有入手NAS的计划,不妨关注下极空间。

好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~

<think>嗯,用户想在威联通的NAS上用Docker部署Jellyfin媒体服务器。首先,我需要回忆一下之前的相关知识。记得威联通的NAS支持Docker,可以通过Container Station来管理容器。用户可能需要先安装Docker环境,但威联通应该已经内置了Container Station,所以不需要额外安装Docker。 接下来,部署Jellyfin的步骤大概包括拉取镜像、配置容器参数、设置存储卷和网络端口。用户可能需要注意文件路径的映射,比如媒体库的目录和配置文件的位置。另外,权限问题也很重要,UID和GID的设置可能会影响文件访问。 然后,用户可能需要配置硬件加速,尤其是如果打算用核显来转码的话。需要确保NAS的硬件支持,并且在Docker容器中挂载相应的设备,比如/dev/dri。不过,不同型号的威联通NAS可能有不同的硬件支持,可能需要用户检查自己的设备是否支持Intel或AMD的GPU。 另外,用户可能会遇到网络配置的问题,比如端口转发是否正确,是否需要在路由器上设置。还有,安全性和更新方面,可能需要建议用户使用Watchtower自动更新容器,或者使用Portainer来管理,这些在之前的引用里提到过。 还有,用户之前提到过NAS Tools的问题,可能对媒体库管理有需求,所以Jellyfin部署后可能需要和这些工具整合。比如,媒体文件的元数据获取可能需要正确的路径设置,或者网络访问权限。 最后,常见问题部分需要考虑用户可能遇到的权限错误、端口冲突或者硬件加速不工作的情况。需要给出检查命令和解决步骤,比如查看日志、确认路径映射、检查设备权限等。</think>### 分步指南:威联通NAS通过Docker部署Jellyfin媒体服务器 #### 一、前期准备 1. **启用Container Station** 进入威联通控制台 → 应用中心 → 安装并打开「Container Station」,这是威联通原生支持的Docker管理工具[^2] 2. **创建媒体库目录** 建议在共享文件夹中新建`/Docker/Jellyfin`目录,包含三个子目录: ``` /Config # 存放配置文件 /Cache # 存放转码缓存 /Media # 媒体文件存放处(可链接已有媒体库) ``` #### 二、Docker部署流程 1. **拉取镜像** 在Container Station中搜索`jellyfin/jellyfin`,选择官方镜像并下载最新版本 2. **创建容器配置** ```yaml version: '3' services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin environment: - TZ=Asia/Shanghai - PUID=1000 # 通过id命令查询管理员用户ID - PGID=100 # 查询管理员组ID volumes: - /share/Docker/Jellyfin/Config:/config - /share/Docker/Jellyfin/Cache:/cache - /share/Public/Media:/media # 映射实际媒体库路径 devices: - /dev/dri:/dev/dri # 硬件加速设备(仅支持Intel核显) ports: - 8096:8096 # Web访问端口 - 8920:8920 # HTTPS端口 restart: unless-stopped ``` 3. **硬件加速配置(可选)** - 确认NAS支持Intel Quick Sync Video技术 - 在容器设置中添加设备映射:`/dev/dri → /dev/dri` - Jellyfin后台开启「Intel QuickSync」转码选项 4. **启动容器** 通过SSH执行部署命令: ```bash docker-compose -f /share/Docker/Jellyfin/docker-compose.yml up -d ``` #### 三、初始设置 1. 访问`http://NAS_IP:8096`完成向导 2. 添加媒体库时选择容器内的`/media`路径 3. 在「控制台 → 播放」中启用硬件加速(若配置) 4. 建议开启「允许远程连接」以支持外网访问 #### 四、优化建议 1. **硬件转码验证** 播放视频时查看控制台→日志,出现`h264_qsv`标识表示加速生效 2. **自动更新** 配合Watchtower容器实现自动更新[^2]: ```bash docker run -d --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower --cleanup --interval 3600 ``` 3. **安全加固** - 修改默认端口映射(如外部端口改为随机高位端口) - 通过威联通Qfirewall设置访问白名单 - 启用HTTPS访问(需申请SSL证书) #### 常见问题排查 1. **权限问题** ```bash chmod -R 775 /share/Docker/Jellyfin chown -R admin:administrators /share/Docker/Jellyfin ``` 2. **转码失败** 检查设备映射是否正确: ```bash docker exec jellyfin ls /dev/dri ``` 3. **网络不通** 验证防火墙规则: ```bash iptables -L -n | grep 8096 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值