如何通过Cron实现Docker Compose开机自启动?
如何通过Cron实现Docker Compose开机自启动?
兄弟,我刚上手的时候也踩过这个坑!你加的@reboot sudo docker-compose up -d没生效,大概率是这几个常见问题,咱们一个个来排查解决:
路径不对!Cron的环境和终端不一样
咱们在终端里能直接用docker-compose,是因为它的路径在系统的PATH环境变量里,但Cron的PATH默认很窄,可能找不到这个命令。而且你没指定docker-compose.yml的绝对路径的话,Cron会默认在用户家目录找,要是你的配置文件不在那,肯定跑不起来。
解决步骤:- 先查
docker-compose的绝对路径:运行which docker-compose,比如会得到/usr/local/bin/docker-compose - 找到你的
docker-compose.yml的绝对路径,比如/home/yourname/my-docker-app/docker-compose.yml - 把Cron命令改成带绝对路径的版本:
@reboot sudo /usr/local/bin/docker-compose -f /home/yourname/my-docker-app/docker-compose.yml up -d
- 先查
Sudo需要密码,Cron没法交互输入
开机的时候Cron是后台运行的,没有交互界面,用sudo的话会因为要输密码卡住。解决办法有两个:- 直接编辑root用户的Crontab:运行
sudo crontab -e,然后添加不带sudo的命令:@reboot /usr/local/bin/docker-compose -f /home/yourname/my-docker-app/docker-compose.yml up -d(root权限本身就能直接操作Docker,不用sudo) - 给当前用户配置免密运行
docker-compose:运行sudo visudo,在文件末尾加一行yourusername ALL=(ALL) NOPASSWD: /usr/local/bin/docker-compose(把yourusername换成你的真实用户名,路径要和之前查到的一致),保存退出后再用自己的Crontab就行。
- 直接编辑root用户的Crontab:运行
查看Cron日志排查错误
要是还是不行,就去看Cron的日志找问题:
在Ubuntu/Debian系统里,运行grep CRON /var/log/syslog,看看有没有类似“command not found”(路径错了)或者“permission denied”(权限不够)的提示,根据提示调整就行。
最后给个小建议:改完Cron后可以先重启Cron服务生效,运行sudo service cron restart,然后重启服务器测试效果~
备注:内容来源于stack exchange,提问作者rubytester
相关产品推荐
相关产品推荐

