<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="Docker设置容器自动启动或定时启动与镜像自动更新">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2023-03-31 09:28<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
Docker设置容器自动启动或定时启动与镜像自动更新


随系统启动


设置docker开机启动


systemctl enable docker.service




设置容器自动启动


对于新容器，创建时添加参数


--restart=always


对于已创建容器，需要使用update命令


docker update --restart=always &lt;容器名&gt;




如果容器因为出错而退出，此时又会重新启动，然后又出错，又启动，容易进入启动重启死循环中。


 




定时启动


使用crontab命令






输入如下命令会自动打开一个文件，文件中的每一行都是一个定时任务。


crontab -e


每一行定时任务有两部分组成，前面是cron表达式，后面是要执行的命令如每天凌晨两点重启某个容器。


0 2 * * * docker restart &lt;容器名&gt;


使定时任务生效


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字段如果是星号，则表示在满足其它字段的制约条件后每月都执行该命令操作。


逗号（,）：可以用逗号隔开的值指定一个列表范围，例如，&ldquo;1,2,5,7,8,9&rdquo;


中杠（-）：可以用整数之间的中杠表示一个整数范围，例如&ldquo;2-6&rdquo;表示&ldquo;2,3,4,5,6&rdquo;


正斜线（/）：可以用正斜线指定时间的间隔频率，例如&ldquo;0-23/2&rdquo;表示每两小时执行一次。同时正斜线可以和星号一起使用，例如*/10，如果用在minute字段，表示每十分钟执行一次。


注：


数字的表示最好用2为阿拉伯数字显示


周和日最好不要同时用


定时任务要加注解


可以定向到日志文件或者空文件


定时任务一定是绝对路径，且目录必须存在才能出结果


crontab 服务一定要开启运行




Linux计划任务Crontab 在线生成器


https://crontab.guru/


例子：


https://crontab.guru/#0_8_*_*_5


表示：&ldquo;At 08:00 on Friday.&rdquo;（每周五早上8点） 


群晖系统中定时重启/关闭/启动Docker容器的方法




1、打开群晖Docker，左边菜单&ldquo;容器&rdquo;，找到你想要设置定时重启/关闭/开启的容器，记录一下名称（以我的群晖为例，容器名称为xhofe-alist，该容器已经运行了3天）；


2、点一下容器的日志，看到最后生成日志的时间是2022年11月10日，的确不是今天的；


3、打开群晖控制面板，在任务计划，新增，计划的任务，用户定义的脚本；


4、一般设置里面，填写任务名称，用户账号要设置为root，在&ldquo;已启动&rdquo;处打勾；


5、在&ldquo;计划&rdquo;里面设置好定时运行的时间（我设置的是每天凌晨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




是以下面Dcoker名字叫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




PlusPushtoken从 http://www.pushplus.plus/push1.html 获得。


默认是拉取最新的镜像，如果版本多会占用过多空间，可以加上参数  -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 这个 LA&shy;BEL 并设置它的值为 false，或者在启动命令中加入 --label com.centurylinklabs.watchtower.enable=false 参数可以排除相应的容器。




XML/HTML代码


    # openwrt-mini 镜像的容器启动命令，Watch&shy;tower 将永远忽略它的更新，即使它包含在自动更新列表中  

    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 参数，

    #并且给 Watch&shy;tower 加上 --label-enable 选项时，Watch&shy;tower 将只更新这些包含此参数的容器

    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




设置 com.centurylinklabs.watchtower.enable=false 参数后容器将永远被 Watch&shy;tower 忽略，包括后面将要提到的手动更新方式，所以一般不推荐这样做，除非你愿意手动重建的原生方式更新。


设置自动更新检查频率


默认情况下 Watch&shy;tower 每 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




--schedule, -s - 设置定时检测更新时间。格式为 6 字段 Cron 表达式，而非传统的 5 字段，即第一位是秒。比如每天凌晨 2 点检查一次更新：




XML/HTML代码


    docker run -d \

        --name watchtower \

        --restart unless-stopped \

        -v /var/run/docker.sock:/var/run/docker.sock \

        containrrr/watchtower -c \

        --schedule &quot;0 0 2 * * *&quot;




参考：https://blog.csdn.net/qq_21127151/article/details/129574398


不同系统可能设置命令不一样，可以根据实际情况进行修改。


常用强国Docker




XML/HTML代码


    docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always heyibear/study_xxqg:latest




浏览器直接打开：http://127.0.0.1:8080 账号：admin 密码：admin 强国扫描登录自动学习。配置文件可以修改账号密码和普通用户信息。


另外一个强国Docker




XML/HTML代码


    docker run --name study_xxqg -d -p 8080:8080 -v /opt/study_xxqg/:/opt/config/ --restart always sjkhsl/study_xxqg:latest





Github：https://github.com/sjkhsl/study_xxqg   Dockerhub：https://hub.docker.com/r/sjkhsl/study_xxqg

浏览器直接打开：http://127.0.0.1:8080 账号：admin 密码：admin 必须用浏览器登录添加学习强国账号。配置文件自行修改，基本同上。


设置每天凌晨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 &quot;0 0 2 * * *&quot;







单用户强国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




PlusPushtoken从 http://www.pushplus.plus/push1.html 获得。


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/




将主机/www/runoob目录拷贝到容器96f7f14e99ab中，目录重命名为www。




XML/HTML代码


    docker cp /www/runoob 96f7f14e99ab:/www





将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。




XML/HTML代码


    docker cp  96f7f14e99ab:/www /tmp/




简单来说和Linux的cp命令一样，无非就是加了一个容器的名字或者id作为路径。


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
