如何定时启动和停止docker容器
提示:本篇文章约4116字符,阅读大约需要5分钟。
关注专栏不迷路
写在前面
之前在写Portainer教程的时候,有值友在评论区问我是否可以写一篇定时开关容器的文章。
诺,满足你。
注:以下内容不适用于群晖系统,其他基于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路径就是:
/usr/local/bin/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点启动定时任务的含义。
以下为时间表达式的具体规范:
| 字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
|---|---|---|---|---|
| Seconds | 是 | 0–59 | *, - | 标准实现不支持此字段。 |
| Minutes | 是 | 0–59 | *, - | |
| Hours | 是 | 0–23 | *, - | |
| Day of month | 是 | 1–31 | *, - ? L W | ? L W只有部分软件实现了。 |
| Month | 是 | 1–12或JAN–DEC | *, - | |
| Day of week | 是 | 0–7或SUN–SAT | *, - ? L # | ? L #只有部分软件实现了。 |
| Year | 否 | 1970–2099 | *, - | 标准实现不支持此字段。 |
注:
L:L字符在时间表达式中表示月份或星期的最后一天。例如,7L表示月份中的最后一个星期天,L-3表示一个月中的倒数第三天。W:W字符在时间表达式中表示最近的工作日(周一至周五)。它用于日期字段(Day of month)中。例如,15W表示离指定日期最近的工作日。#:#字符在时间表达式中用于指定月份中的第几个星期几。例如,2#3表示月份中的第三个星期二。?:?字符在时间表达式中用于指示日期字段(Day of month)或星期字段(Day of week)可以是任意值。它在某些情况下用于替代其他字段。例如,如果你想要在每月的第五个工作日执行任务,你可以使用?代替星期字段,如? 5。
这些特殊字符可以用于增加时间表达式的灵活性和精确度,以满足特定的需求。在实际使用中,它们的解释可能会因不同的调度器实现而有所差异,因此需要根据具体的调度器文档或工具来确认其准确的含义和用法。
cron表达式广泛应用于定时任务调度、自动化脚本、定时数据采集等方面。我们日常使用的青龙面板的定时任务即基于cron表达式进行设置。
总结
今天我们不仅掌握了如何定时启动和关闭容器,也掌握了时间表达式。这在之后NAS的使用中,将使我们的操作变得更加自如。
下期预告:常用docker命令全总结。
这就是本期的全部内容了,如果这篇文章对你有帮助的话,欢迎你在评论区多多讨论,也欢迎关注、点赞、打赏一键三连,你的支持对我非常重要。
我是冥冰薇,点个关注不迷路,我们下期再见。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~











冥冰薇
校验提示文案
酉鑫
我是威联通的系统。
校验提示文案
[已注销]
校验提示文案
苦逼阿凯
校验提示文案
隔壁的七大叔
校验提示文案
歪我是小爽啊
校验提示文案
啥都没有
校验提示文案
DMZ还是诞生的样子吗
校验提示文案
跟我买不亏
校验提示文案
Jerrytutu
校验提示文案
mauyuk
校验提示文案
toyli
校验提示文案
张志轩
校验提示文案
酉鑫
校验提示文案
值友8549512914
校验提示文案
酉鑫
校验提示文案
酉鑫
我是威联通的系统。
校验提示文案
张志轩
校验提示文案
值友8549512914
校验提示文案
toyli
校验提示文案
mauyuk
校验提示文案
Jerrytutu
校验提示文案
跟我买不亏
校验提示文案
DMZ还是诞生的样子吗
校验提示文案
啥都没有
校验提示文案
歪我是小爽啊
校验提示文案
苦逼阿凯
校验提示文案
隔壁的七大叔
校验提示文案
[已注销]
校验提示文案
冥冰薇
校验提示文案