在 Docker 环境下使用 supervisor 遇到的问题记录。
前言
今天在部署 php-fpm 的 Docker 容器的时候,由于其他应用用到了 supervisor,记录一下基本的配置流程,以及将程序日志输出到 Docker 日志的方法。
配置
首先是安装,在 Dockerfile
直接用 apt
安装即可。注意由于最后需要用 CMD
启动 supervisor
,所以需要把 php-fpm
的启动方式也改成 supervisor
守护。
在 Dockerfile
同目录下创建 supervisord.conf
,内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
| [supervisord]
nodaemon=true
user=root
[program:php-fpm]
command = /usr/local/sbin/php-fpm
process_name=%(program_name)s
autostart=true
autorestart=true
startretries=5
exitcodes=0,2,70
stopsignal=QUIT
stopwaitsecs=2
|
然后在 Dockerfile
中进行相应配置:
1
2
3
4
5
6
7
8
| FROM php:8.0-fpm
RUN apt update \
&& apt install -y git zip unzip supervisor
COPY supervisord.conf /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord","-n"]
|
这样就可以使用了,但是问题是 php-fpm
的日志不会输出到 Docker 的日志,查看起来非常不方便,可以通过将日志流输出到/dev/stdout
来解决,具体做法是在 supervisord.conf
中需要输出日志的 program
段中添加如下内容:
1
2
3
4
| stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
|
完整的 supervisord.conf
文件如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| [supervisord]
nodaemon=true
user=root
[program:php-fpm]
command = /usr/local/sbin/php-fpm
process_name=%(program_name)s
autostart=true
autorestart=true
startretries=5
exitcodes=0,2,70
stopsignal=QUIT
stopwaitsecs=2
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
|
参考资料
Docker, Supervisord and logging - how to consolidate logs in docker logs?