docker中使用supervisor配置nginx,mysql等进程自动开机启动
文章目录
1.问题描述
(1)docker中配置的nginx,mysql不能随docker的启动而自动开启;
(2)通过update-rc.d配置的开机自启动也不能生效;
(3)dockerfile中,从非mysql镜像开始的mysql安装配置,启动同样报错:
"The command '/bin/sh -c usermod -d /var/lib/mysql mysql && /usr/sbin/nginx -c /etc/nginx/nginx.conf && /usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf' returned a non-zero code: 1"
以service mysql restart命令方式同样如此
(mysql镜像没有试过)
(4)若在运行一个容器时,CMD命令启动msyql服务:
docker exec -it screen /usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf
报错:/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot stat shared object: Permission denied
这个问题google上还未找到答案
nginx通过CMD可以开启,但是项目的需求不仅仅是开机启动nginx,所以pass
2.解决思路
既然运行容器时的CMD命令可以执行一条指令,那么开启一个可以管理nginx,mysql的服务不就可以了么。
综上,运行容器时启动supervisor,通过supervisor启动容器内的nginx,mysql等。
3.具体解决方案
(1)supervisor中配置nginx,mysql等自动重启
注意!注意!注意!
所有supervisor管理的进程都不能开启后台模式,例如"service nginx start"这种,只能使用前台模式进行配置,否则服务会一直重启!
配置文件一般写在/etc/supervisor/conf.d/中,文件内容如下:
nginx配置文件:
[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'
autostart=true
autorestart=true
user=root
mysql配置文件:
[program:mysql]
command=/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf
autostart=true
autorestart=true
user=root
redis配置文件(修改redis.conf中的daemon为no,关闭redis后台模式):
[program:redisd]
command=/usr/local/redis/bin/redis-server
priority=1001
autostart=true
startretries=3
autorestart=true
user=root
(2)docker运行容器CMD命令启动supervisor
docker exec -it screen /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
(3)docker exec命令启动supervisord服务时出现warning
Unlinking stale socket /var/run/supervisor/supervisor.sock
解决方案:
unlink /var/run/supervisor/supervisor.sock
版权声明:本文为u013945470原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。