美文网首页java高级开发
定时启动docker容器

定时启动docker容器

作者: 老鼠AI大米_Java全栈 | 来源:发表于2020-09-23 17:32 被阅读0次

    对于一些不稳定又难于定位的问题的服务,可以定时重启下,这是最简单的办法。

    创建定时任务(centos7)

    1. 查看定时任务格式,输入如下命令:
    # cd /etc
    # cat crontab
    

    可以看到以下内容


    crond.png

    编写如下:

    • 0 2 * * * /home/blue/do/rsyncfile_day.sh 每天凌晨2点0分开始执行
    • 0 2 1 4 * /home/blue/do/rsyncfile_day.sh 4月1号凌晨2点0分开始执行
    • 0 2 * */2 * docker exec dnmp_nginx_1 certbot renew 每隔两月凌晨2点执行更新
    1. 查看docker服务
      输入命令docker ps查看相关服务

      docker.png
    2. 创建定时任务
      命令行输入crontab -e会自动打开一个空文件

    # crontab -e
    

    然后输入需要重启的docket服务
    如每隔5分钟重启下服务

    */5 * * * * docker restart yw-producer/container-id

    重启定时任务

    systemctl restart crond
    

    然后通过日志观察系统定时重启。

    1. 查看定时任务文件
      在/var/spool/cron/下面
    # cd /var/spool/cron
    # ls
    

    这里可以看到一个root文件,因为我用的root账号登录,所以生成了一个root文件。

    通过cat命令可以看到这个文件的内容就是前面编辑的内容。
    也可以使用crontab -l查看所有定时任务。

    1. 查看定时任务执行记录
      执行命令cat /var/spool/mail/root,可以查看执行记录
      image.png
      image.png

    定时执行脚本

    若需要定时执行某一段脚本,也可以通过上面的定时任务设置

    如可以在容器中添加脚本并执行。

    1. 进入容器
    docker exec -it crontab_task bash
    

    进入后可以看到以下文件


    image.png

    新建2个文件如下
    shell文件:

    #!/usr/bin/env python
    python /home/demo1.py
    

    py文件:

    #! /usr/bin/env python
    if __name__ == '__main__':
       a = 1
       b = 1
       print(a+b)
    

    接下来就是定时任务的设置了, crontab -e设置定时任务

    */1 * * * * docker restart crontab_task && docker exec crontab_task /bin/bash /home/demo.sh

    重启定时任务并查看结果。

    关于port is already allocated问题

    是容器占用的port还没有完全释放
    Docker 在启动容器时,报出了下面的错误:

    docker: Error response from daemon: driver failed programming external connectivity on endpoint gateway_cc39fe5306c1 (cc39fe5306c1ba7633fa14b9bcddb66536153619bf57b84b30673e2328e9284g): Bind for 0.0.0.0:80 failed: port is already allocated.

    查看进程,发现相关的容器并没有在运行,而 docker-proxy 却依然绑定着端口:

    docker ps
    ps -aux | grep -v grep | grep docker-proxy
    

    删除所有容器,停止 doker 进程,然后删除 local-kv.db 这个文件,再启动 docker 就可以了。

    docker rm $(docker ps -aq)
    sudo service docker stop
    sudo rm /var/lib/docker/network/files/local-kv.db
    sudo service docker start
    

    相关文章

      网友评论

        本文标题:定时启动docker容器

        本文链接:https://www.haomeiwen.com/subject/cguoyktx.html