Docker设置容器自动启动或定时启动与镜像自动更新
随系统启动
设置docker开机启动
systemctl enable docker.service
设置容器自动启动
对于新容器,创建时添加参数
--restart=always
对于已创建容器,需要使用update命令
docker update --restart=always <容器名>
如果容器因为出错而退出,此时又会重新启动,然后又出错,又启动,容易进入启动重启死循环中。
定时启动
使用crontab命令
输入如下命令会自动打开一个文件,文件中的每一行都是一个定时任务。
crontab -e
每一行定时任务有两部分组成,前面是cron表达式,后面是要执行的命令如每天凌晨两点重启某个容器。
0 2 * * * docker restart <容器名>
使定时任务生效
systemctl restart crond
使用如下命令查看所有定时任务
crontab -l
crontab命令详解
min hour day month weekday command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
注:
数字的表示最好用2为阿拉伯数字显示
周和日最好不要同时用
定时任务要加注解
可以定向到日志文件或者空文件
定时任务一定是绝对路径,且目录必须存在才能出结果
crontab 服务一定要开启运行
Linux计划任务Crontab 在线生成器
例子:
表示:“At 08:00 on Friday.”(每周五早上8点)
群晖系统中定时重启/关闭/启动Docker容器的方法
1、打开群晖Docker,左边菜单“容器”,找到你想要设置定时重启/关闭/开启的容器,记录一下名称(以我的群晖为例,容器名称为xhofe-alist,该容器已经运行了3天);
2、点一下容器的日志,看到最后生成日志的时间是2022年11月10日,的确不是今天的;
3、打开群晖控制面板,在任务计划,新增,计划的任务,用户定义的脚本;
4、一般设置里面,填写任务名称,用户账号要设置为root,在“已启动”处打勾;
5、在“计划”里面设置好定时运行的时间(我设置的是每天凌晨5点运行);
6、在任务设置的用户定义的脚本输入以下命令(xhofe-alist为上面第1个步骤的容器名称,请自行修改为你实际的容器名称),确定:
docker restart xhofe-alist
7、确定;
8、为了验证命令是否有效,我找到刚刚添加的任务,右键,运行;
9、是;
10、回到Docker容器这边,看到运行时间已经变成了1分钟;
11、再看容器的日志,生成了今天的日志,证明任务计划是有效的;
12、其他的命令,可根据实际需求自行修改和设置:
#启动容器的命令
docker start xhofe-alist
#停止容器的命令
docker stop xhofe-alist
Watchtower 自动更新正在运行的 Docker 容器
自动更新所有的Docker容器
XML/HTML代码
- docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
更新指定的Docker容器
XML/HTML代码
- docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower xxqg
XML/HTML代码
- docker run -d -it --name=xxqg -e ModeType=3 -e PushMode=3 -e PPtoken=PlusPushtoken -e maxtrylogin=3 -e tryloginsleep=60 -e SetUser=1 trustyboy/xxqg-helper:latest
默认是拉取最新的镜像,如果版本多会占用过多空间,可以加上参数 -c (--cleanup)清理旧的的镜像,只保留最新的。
可以更新多个指定的容器
XML/HTML代码
- 如更新 nginx、redis 这两个容器,可以把容器名称追加到启动命令的最后面
- docker run -d \
- --name watchtower \
- --restart unless-stopped \
- -v /var/run/docker.sock:/var/run/docker.sock \
- containrrr/watchtower -c \
- nginx redis
给容器添加 com.centurylinklabs.watchtower.enable 这个 LABEL 并设置它的值为 false,或者在启动命令中加入 --label com.centurylinklabs.watchtower.enable=false 参数可以排除相应的容器。
XML/HTML代码
- # openwrt-mini 镜像的容器启动命令,Watchtower 将永远忽略它的更新,即使它包含在自动更新列表中
- docker run -d \
- --name openwrt-mini \
- --restart always \
- --network openwrt \
- --privileged \
- --label com.centurylinklabs.watchtower.enable=false \
- p3terx/openwrt-mini \
- /sbin/init
- #当容器启动命令中加入 --label com.centurylinklabs.watchtower.enable=true 参数,
- #并且给 Watchtower 加上 --label-enable 选项时,Watchtower 将只更新这些包含此参数的容器
- docker run -d \
- --name watchtower \
- --restart unless-stopped \
- -v /var/run/docker.sock:/var/run/docker.sock \
- containrrr/watchtower -c \
- --label-enable
- # 或者 --label-enable 可以简写为 -e:
- docker run -d \
- --name watchtower \
- --restart unless-stopped \
- -v /var/run/docker.sock:/var/run/docker.sock \
- containrrr/watchtower -ce
设置自动更新检查频率
默认情况下 Watchtower 每 5 分钟会轮询一次,可以使用:--interval, -i - 设置更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新:
XML/HTML代码
- docker run -d \
- --name watchtower \
- --restart unless-stopped \
- -v /var/run/docker.sock:/var/run/docker.sock \
- containrrr/watchtower -c \
- --interval 3600
XML/HTML代码
- docker run -d \
- --name watchtower \
- --restart unless-stopped \
- -v /var/run/docker.sock:/var/run/docker.sock \
- containrrr/watchtower -c \
- --schedule "0 0 2 * * *"
不同系统可能设置命令不一样,可以根据实际情况进行修改。
常用强国Docker
XML/HTML代码
- docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always heyibear/study_xxqg:latest
另外一个强国Docker
XML/HTML代码
- docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always sjkhsl/study_xxqg:latest
设置每天凌晨2点更新并清理 study_xxqg 这个容器。
XML/HTML代码
- docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower study_xxqg -c --schedule "0 0 2 * * *"
单用户强国Docker,可以微信发送通知
XML/HTML代码
- docker run -d -it --name=xxqg -e ModeType=3 -e PushMode=3 -e PPtoken=PlusPushtoken -e maxtrylogin=3 -e tryloginsleep=60 -e SetUser=1 trustyboy/xxqg-helper:latest
Docker cp 命令(用于容器与主机之间的数据拷贝)
语法:
XML/HTML代码
- docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
实例:
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
XML/HTML代码
- docker cp /www/runoob 96f7f14e99ab:/www/
XML/HTML代码
- docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
XML/HTML代码
- docker cp 96f7f14e99ab:/www /tmp/