主管没有启动我的docker容器(Laravel项目)

时间:2017-06-26 20:33:57

标签: php laravel docker dockerfile supervisord

Supervisor没有启动到我的容器中,我无法为我的laravel项目运行php artisan queue:work命令。

从我的Dockerfile中提取

# Add worker to supervisor config file
COPY laravel-worker.conf /etc/supervisor/conf.d/

CMD ["/usr/bin/supervisord"]

这是laravel-worker.conf:

[program:laravel-worker]
command=php /var/www/test/current/artisan queue:work --tries=3
user=myuser
process_name=%(program_name)s_%(process_num)d
directory=/var/www/test/current
stdout_logfile=/tmp/supervisord.log
redirect_stderr=true
numprocs=1
autostart=true
autorestart=true

当我进入容器时,管理员服务未启动:

root@e7227ef40f63:/# service supervisor status
supervisord is  not running.

过程如下:

root@e7227ef40f63:/# ps -aux | grep supervisor
root         1  0.0  0.0   4328   652 ?        Ss   18:21   0:00 /bin/sh -c service ssh restart && service apache2 restart && service cron start && bash /usr/bin/supervisord
root       365  0.0  0.0  55808 10632 ?        Ss   18:25   0:00 /usr/bin/python /usr/bin/supervisord
root       380  0.0  0.0  11120   712 ?        S+   18:27   0:00 grep supervisor

更新

我编辑了我的DockerFile并把这行:

ENTRYPOINT service ssh restart && service apache2 restart && service cron start && /usr/bin/supervisord && bash 

当容器启动时,服务现在已经很好地启动了:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.0   4328   652 ?        Ss   05:20   0:00 /bin/sh -c service ssh restart && service apache2 restart && service cron start && /usr/bin/supervisord && bash
root        25  0.0  0.0  55176  1140 ?        Ss   05:20   0:00 /usr/sbin/sshd
root        43  0.1  0.0 406408 25504 ?        Ss   05:20   0:00 /usr/sbin/apache2 -k start
www-data    46  0.0  0.0 406440  8416 ?        S    05:20   0:00 /usr/sbin/apache2 -k start
www-data    47  0.0  0.0 406440  8416 ?        S    05:20   0:00 /usr/sbin/apache2 -k start
www-data    48  0.0  0.0 406440  8416 ?        S    05:20   0:00 /usr/sbin/apache2 -k start
www-data    49  0.0  0.0 406440  8416 ?        S    05:20   0:00 /usr/sbin/apache2 -k start
www-data    50  0.0  0.0 406440  8416 ?        S    05:20   0:00 /usr/sbin/apache2 -k start
root        59  0.0  0.0  17484   636 ?        Ss   05:20   0:00 /usr/sbin/cron
root        63  0.2  0.0  56012 10788 ?        Ss   05:20   0:00 /usr/bin/python /usr/bin/supervisord
root        64  0.0  0.0  20032  1280 ?        S    05:20   0:00 bash
root        89  0.1  0.0  20240  1996 ?        Ss   05:20   0:00 bash
root       112  0.0  0.0  17492  1168 ?        R+   05:21   0:00 ps -aux

但它确定主管没有启动我的配置文件,因为我没有看到应该运行的8个进程..

1 个答案:

答案 0 :(得分:0)

这是不好的部分:

&& bash /usr/bin/supervisord

supervisord不是bash脚本。按原样执行:&& /usr/bin/supervisord

但是,我建议您完全避免在容器中使用service。通常,将多个流程运行到容器中会被视为antipattern,但如果您真的需要它,最好只使用supervisor。为每个进程(cron,sshd等)创建一个.conf文件,并且只在CMD中运行supervosord。