docker开机启动nginx,mysql等服务的方式

docker中使用supervisor配置nginx,mysql等进程自动开机启动

文章目录

    • docker中使用supervisor配置nginx,mysql等进程自动开机启动
      • 1.问题描述
      • 2.解决思路
      • 3.具体解决方案
        • (1)supervisor中配置nginx,mysql等自动重启
        • (2)docker运行容器CMD命令启动supervisor
        • (3)docker exec命令启动supervisord服务时出现warning

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

你可能感兴趣的:(技术,docker)