Dockerfile运行只支持一条命令,当在码头工人里要运行多条命令,用主管来管理就比较合适了。
主管是一个Python开发的客户机/服务器系统,可以管理和监控类UNIX操作系统上面的进程。它可以同时启动,关闭多个进程,使用起来特别的方便。
<强>组成部分强>
主管主要由两部分组成:
supervisord(服务器部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
supervisorctl(客户端部分):命令行客户端,用户可以通过它与不同的supervisord进程联系,获取子进程的状态等。
<强> 强>
但是使用主管,Django运行的日志就不会在码头工人里输出了,默认的输出如下:
2018-03-28 06:48:20,292暴击主管作为根用户运行(没有用户配置文件)
引用>
2018-03-28 06:48:20,308信息supervisord始于pid 1
2018-03-28 06:48:21,310信息了:“celery_beat”与pid 7
2018-03-28 06:48:21,312信息了:“celery_worker”与pid 8
2018-03-28 06:48:21,313信息了:“django”与pid 9
2018-03-28 06:48:22,315信息成功:celery_beat进入运行状态,过程比熬夜;比1秒(startsecs)
2018-03-28 06:48:22,315信息成功:celery_worker进入运行状态,过程比熬夜;比1秒(startsecs)
2018-03-28 06:48:22,315信息成功:django进入运行状态,过程比熬夜;比1秒(startsecs)
上面的码头工人中主管配置如下:
(supervisord) nodaemon=true (项目:django) python命令=管理。py runserver 0.0.0.0:8080 (项目:celery_worker) python命令=管理。py芹菜工人4 - c - l信息 (项目:celery_beat) python命令=管理。py芹菜击败这样的配置在容器中是同时运行Django,芹菜。
<强> 1,改进后的配置方案强>
(inet_http_server) 端口=9001 用户名=美国广播公司 密码=123456 (supervisord) nodaemon=true 日志文件=/var/log/主管/supervisord。日志;(主日志文件,默认/supervisord.log)慢性消耗性疾病 pidfile=/var/跑步/supervisord。pid;(supervisord pidfile;默认supervisord.pid) childlogdir=/var/log/主管;('汽车'孩子日志dir,默认临时美元) (项目:django) python命令=管理。py runserver 0.0.0.0:8080 # stdout_logfile=/var/log/supervisord/django_stdout.log loglevel=信息 redirect_stderr=true (项目:celery_worker) python命令=管理。py芹菜工人4 - c - l信息 loglevel=信息 redirect_stderr=true (项目:celery_beat) python命令=管理。py芹菜打 loglevel=信息 redirect_stderr=true实测发现Django的日志输出会写到stderr.log文件中,所以在配置文件中将错误日志重定向到标准日志里;
redirect_stderr=true容器中的生成的日志文件如下:
root@a16bc77e96bc:/var/log/主管# ls celery_beat-stderr——-supervisor-rSPQ7E。日志django-stderr——-supervisor-9LS_KA.log celery_beat-stdout——-supervisor-t5Q4UI。日志django-stdout——-supervisor-cTSBmq.log celery_worker-stderr——-supervisor-TRFzc7。日志supervisord.log celery_worker-stdout——-supervisor-xNgeBU.log<强> 2,查看日志强>
运行容器时,将9001端口映射出去,通过ip: 9001年访问:
点击Tail - f查看各个进程的日志。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解码头工人容器运行多条命令(主管)