如何定时启动和停止docker容器

2023-05-23 18:25:14 17点赞 127收藏 18评论

提示:本篇文章约4116字符,阅读大约需要5分钟。

关注专栏不迷路

如何定时启动和停止docker容器

写在前面

之前在写Portainer教程的时候,有值友在评论区问我是否可以写一篇定时开关容器的文章。

值友评论值友评论

诺,满足你。




威联通(QNAP)TS-464C宇宙魔方四核心处理器网络存储服务器内置双M.2插槽NAS私有云(453Dmini升级)3599元家用4盘位旗舰款,四核心处理器,双2.5GbE口,NVMe双M.2插槽。京东去购买




威联通(QNAP)TS-462C时空要塞Intel®处理器网络存储服务器内建2.5G网口NAS私有云(TS-451D升级版)2599元TS-462C处理器采用lntel N4505双核心处理器,频率可达2.9GHz,以及可扩充至16GBDDR4双通道内存。nas存储支持2.5GbE网络传输,TS-462C搭载全新的QTS5.0界面,从内而外焕然一新。TS-462C高规提供HDMI2.0输出接口,支持4K@60Hz分辨率。京东去购买




群晖(Synology)DS923+4盘位万兆扩展NAS网络存储服务器文件共享自动备份私有云团队云盘4900元京东去购买



注:以下内容不适用于群晖系统,其他基于Linux的NAS系统请自行测试。

定时启动容器(Linux)

在 Linux 系统下,你可以使用 cron 任务来定时启动 Docker 容器。以下是一个简单的步骤来设置定时启动 Portainer 容器:

第一步,打开终端;

第二步,输入 crontab -e 命令来编辑 cron 文件。如果这是你第一次运行这个命令,它可能会让你选择一个编辑器,例如 nano 或 vi;

强制使用nano编辑器的方法:

EDITOR=nano crontab -e

第三步,在打开的文件中,你可以添加一个新的 cron 任务。每个 cron 任务都有五个时间和日期字段,后面跟着要运行的命令。例如,如果你想要每天早上 6 点启动 Portainer 容器,你可以添加以下行:

0 6 * * * /usr/bin/docker start portainer

这行命令的意思是在每天的第 6 小时(即早上 6 点)执行 /usr/bin/docker start portainer 命令。

编辑示例编辑示例

注意:你需要确保 Docker 的路径是正确的。你可以通过在终端中输入 which docker 来查看 Docker 的路径。

确认docker路径确认docker路径

群晖的docker路径就是:

/usr/local/bin/docker

群晖docker路径群晖docker路径

第四步:保存并关闭文件。在 nano 编辑器中,你可以通过按 Ctrl+X,然后按 Y,最后按 Enter 来保存并关闭文件。

第五步:你可以通过输入 crontab -l 命令来查看你的 cron 任务。

这样,你的 Portainer 容器就会在每天早上 6 点启动了。如果你需要在不同的时间启动容器,或者启动不同的容器,你可以修改 cron 任务的时间和日期字段,以及要运行的命令。

注意:这种方法假设你已经创建了 Portainer 容器,并且容器的名称是 “portainer”。如果你还没有创建容器,或者容器的名称不同,你需要先创建容器,或者在命令中使用正确的容器名称。

要获取 Docker 容器的名称,你可以使用 docker ps 命令来列出正在运行的容器,并查看容器的名称列。以下是获取容器名称的步骤:

第一步:打开终端。

输入以下命令来列出正在运行的容器:

docker ps

这将显示正在运行的容器的列表,包括容器的ID、名称、状态等信息。

在列表中找到你感兴趣的容器,查看容器名称所在的列。容器名称通常在最后一列,标有`NAMES

例如:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abcdef123456 portainer "/portainer" 2 hours ago Up 2 hours 9000/tcp portainer

在这个示例中,容器名称为 “portainer”。

定时关闭任务同理,比如设置每天18点关闭portainer容器:

Portainer 容器,你可以添加以下行:

0 18 * * * /usr/bin/docker stop portainer

附:时间表达式

当你在 cron 任务中设置时间和日期字段时,它们控制了任务执行的时间。在这个特定的例子中,0 6 * * * 表示任务将在每天的第六个小时(早上6点)执行。

让我们来解释这个时间表达式的各个字段的含义:

  • 第一个字段是分钟字段(Minutes):它表示一个小时中的哪一分钟执行任务。在这里,它是 0,表示任务在每个小时的第 0 分钟执行。

  • 第二个字段是小时字段(Hours):它表示一天中的哪个小时执行任务。在这里,它是 6,表示任务在每天的第 6 个小时执行。

  • 第三个字段是日期字段(Day of the month):它表示一个月中的哪一天执行任务。在这里,它是 *,表示每天都执行任务。

  • 第四个字段是月份字段(Month):它表示一年中的哪个月执行任务。在这里,它是 *,表示每个月都执行任务。

  • 第五个字段是星期字段(Day of the week):它表示一周中的哪一天执行任务。在这里,它是 *,表示每一天都执行任务。

总结起来,0 6 * * * 表达式表示每天的第六个小时(早上6点)执行任务,无论是哪一天、哪一个月或是星期几。这就是为什么这个表达式被用来设置每天早上6点启动定时任务的含义。

以下为时间表达式的具体规范:

字段是否必填允许值允许特殊字符备注
Seconds0–59*, -标准实现不支持此字段。
Minutes0–59*, -
Hours0–23*, -
Day of month1–31*, - ? L W? L W只有部分软件实现了。
Month1–12或JAN–DEC*, -
Day of week0–7或SUN–SAT*, - ? L #? L #只有部分软件实现了。
Year1970–2099*, -标准实现不支持此字段。

注:

  • LL 字符在时间表达式中表示月份或星期的最后一天。例如,7L 表示月份中的最后一个星期天,L-3 表示一个月中的倒数第三天。

  • WW 字符在时间表达式中表示最近的工作日(周一至周五)。它用于日期字段(Day of month)中。例如,15W 表示离指定日期最近的工作日。

  • ## 字符在时间表达式中用于指定月份中的第几个星期几。例如,2#3 表示月份中的第三个星期二。

  • ?? 字符在时间表达式中用于指示日期字段(Day of month)或星期字段(Day of week)可以是任意值。它在某些情况下用于替代其他字段。例如,如果你想要在每月的第五个工作日执行任务,你可以使用 ? 代替星期字段,如 ? 5

这些特殊字符可以用于增加时间表达式的灵活性和精确度,以满足特定的需求。在实际使用中,它们的解释可能会因不同的调度器实现而有所差异,因此需要根据具体的调度器文档或工具来确认其准确的含义和用法。

cron表达式广泛应用于定时任务调度、自动化脚本、定时数据采集等方面。我们日常使用的青龙面板的定时任务即基于cron表达式进行设置。

青龙面板cron表达式示例青龙面板cron表达式示例

总结

今天我们不仅掌握了如何定时启动和关闭容器,也掌握了时间表达式。这在之后NAS的使用中,将使我们的操作变得更加自如。

下期预告:常用docker命令全总结。

这就是本期的全部内容了,如果这篇文章对你有帮助的话,欢迎你在评论区多多讨论,也欢迎关注、点赞、打赏一键三连,你的支持对我非常重要。

我是冥冰薇,点个关注不迷路,我们下期再见。

如何定时启动和停止docker容器

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
18评论

  • 精彩
  • 最新
  • 置顶 手机端代码查看有问题的,可以上网页端看 [高兴]

    校验提示文案

    提交
  • 大佬,请问您一下,为什么我用Xshell进入后,没有跳出您说的编辑器,我用电脑的txt编辑器编辑,但是不能保存,请问我这一步有什么错误吗?
    我是威联通的系统。

    校验提示文案

    提交
  • 有什么用呢,好像docker不会太费电吧

    校验提示文案

    提交
    这个算是根据值友需求定制的教程,具体有什么用,其实我也不知道 [傻笑] [傻笑]

    校验提示文案

    提交
    能用就不折腾

    校验提示文案

    提交
    收起所有回复
  • 感谢大佬!!!

    校验提示文案

    提交
    哈哈哈哈哈没事 [张小草_笑]

    校验提示文案

    提交
    收起所有回复
  • 学习了!

    校验提示文案

    提交
  • 哇哦,真棒,学习啦

    校验提示文案

    提交
  • 感谢大佬的分享,种草,确实可以啊!

    校验提示文案

    提交
  • 威联通和群辉哪个更契合家用

    校验提示文案

    提交
  • 太专业了

    校验提示文案

    提交
  • 帮大忙了,刷流的QB 每天晚上限速都会让家庭网络很卡,如果能定时在下班前关掉,第二天出门打开,就不用频繁手动操作了

    校验提示文案

    提交
  • 非常有用,看完终于会了。

    校验提示文案

    提交
  • 群晖的应该怎么操作

    校验提示文案

    提交
  • 你好,能写一下已经建好运行的docker容器怎么修改设置延时30S启动么,或者在确保另外一个容器启动后再启动该容器,感谢!

    校验提示文案

    提交
  • 已经度娘找到答案了

    校验提示文案

    提交
  • 感谢分享这么好的教程

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
相关好价
最新文章 热门文章
127
扫一下,分享更方便,购买更轻松