我有一个 docker 容器,它在其中运行多个服务。我希望每个服务都将其输出发送到控制台。这是一个开发容器,所以我想在工作时查看所有输出。
我试过这个文件:
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
autostart=true
autorestart=true
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=900
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
username=www-data
autorestart=true
autostart=true
[program:php-fpm]
command=/usr/sbin/php-fpm7.4 -F
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autostart=true
autorestart=true
priority=5
[program:memcached]
command=/usr/bin/memcached -u root
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autostart=true
autorestart=true
priority=200
但它只输出supervisord消息,而不是来自服务的消息。我看到另一个线程向其中发送日志消息,/dev/fd/1
所以我也尝试了,但没有成功。
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
我的基础镜像是 ubuntu 20.04。
为什么我不能将服务日志消息输入控制台?
首先,不要使用 supervisord 和 docker,选择一个或另一个,如果您使用的是 docker,请使用 docker compose 并使用 docker 拆分每个服务来控制进程,但如果您无论如何都要这样做.. . 我启动了主管
supervisord -n
并更新了我的 nginx 配置以将日志发送到 /dev/stderr 和 /dev/stdout 并且一切都按预期工作。nginx的启动命令由supervisord发送到/dev/stdout,nginx日志发送到nginx配置的地方,nginx启动参数只能配置error_log,具体链接见下文。sshd 日志记录
nginx 日志记录
php-fpm 日志记录
memcached 日志记录(详细)