飞牛 NAS Docker,让容器按你想要的顺序启动

知新坊 教程归档 7

飞牛的 Docker,其实在功能层面已经基本可以满足大多数人的使用需求了,不管是日常跑点服务,还是部署一些常见应用,用起来都没什么大问题

但在实际使用过程中,有一个比较明显的困扰,容器启动时没有先后顺序的控制能力

有些场景对启动顺序是有要求的,比如需要等数据库完成初始化,或者必须等 CD2 之类的挂载完全就绪之后,其他容器再启动,否则就很容易出现启动失败、服务异常的问题

飞牛 NAS Docker,让容器按你想要的顺序启动-第1张图片-资源分享

目前飞牛 Docker 并不具备“ 延迟启动 ”或“ 按顺序启动容器 ”的功能,每次重启设备时,容器几乎是同时拉起的,这在依赖关系稍微复杂一点的环境里,就显得不太友好了今天想和大家分享一个EWEDL大佬写了一个脚本项目, 这个脚本的实现方式并不复杂,核心原理是根据用户的配置,在系统指定的位置创建一个服务,由这个服务来负责 Docker 容器的启动流程

飞牛 NAS Docker,让容器按你想要的顺序启动-第2张图片-资源分享

简单来说,就是把容器的启动交给这个服务统一管理,再按照用户设定好的顺序和延迟时间,逐个去启动对应的容器,这样一来,就可以很自然地实现“等数据库准备完成后再启动应用”、“等挂载稳定后再启动其他服务”这样的需求

我相信你肯定用得到这个脚本

简单使用教程

1️⃣确认相关容器本身已经正常部署并独立运行正常

飞牛 NAS Docker,让容器按你想要的顺序启动-第3张图片-资源分享

2️⃣需要关闭添加到延时启动容器的自启动功能,UI界面修改方式,先停止运行容器,然后详情->设置->基本设备->开机自动开启的✅去掉, 然后保存,在启动容器

飞牛 NAS Docker,让容器按你想要的顺序启动-第4张图片-资源分享

3️⃣Compose方式修改,需要先停止对应容器, 删除容器 (映射本地数据不会丢失),然后去Compose找到对应项目,点击详情->YAML配置,把restart设置成no,然后重新构建一下就行(这个3️⃣的方式和2️⃣的方式二选一就行)

飞牛 NAS Docker,让容器按你想要的顺序启动-第5张图片-资源分享

创建执行脚本

1️⃣打开SSH终端,输入sudo -i 进入root权限,执行下面的命令


curl -s https://gitee.com/ewedl/fn-docker-delay/raw/master/fndocker.sh -o /tmp/fndocker.sh && sudo bash /tmp/fndocker.sh && rm /tmp/fndocker.sh

2️⃣系统会自动进入交互界面, 输入 序号“1 ” 创建新服务

飞牛 NAS Docker,让容器按你想要的顺序启动-第6张图片-资源分享

3️⃣设置脚本存放的目录,或者使用默认路径(建议手动指定目录最佳)

飞牛 NAS Docker,让容器按你想要的顺序启动-第7张图片-资源分享

4️⃣填入你要延时启动的容器,输入对应的 序号 就行,中间用空格隔开,在前面的优先启动,按顺序启动,不设置的容器可以不填进去

飞牛 NAS Docker,让容器按你想要的顺序启动-第8张图片-资源分享

5️⃣设置系统启动后多久后开启第一个容器,和容器之间的启动间隔时间,看下图

飞牛 NAS Docker,让容器按你想要的顺序启动-第9张图片-资源分享

下图就是在我指定目录创建的任务脚本

飞牛 NAS Docker,让容器按你想要的顺序启动-第10张图片-资源分享

里面的内容就是如下图

飞牛 NAS Docker,让容器按你想要的顺序启动-第11张图片-资源分享

如果需要手动对脚本进行时间上的修改,修改后记得给他加一下权限,因为手动修改后就没权限了

chmod +x /你的目录/start_docker.sh

原文地址:

https://club.fnnas.com/forum.php?mod=viewthread&tid=7003

关注公众号