Docker环境下MySQL如何同时输出错误日志至文件与stderr?
Docker中MySQL同时输出错误日志至文件与stderr的实现方法
有两种可行方案能满足你的需求:
方案一:利用Shell命令重定向实现
直接在启动容器时,通过Shell的tee命令将MySQL的错误日志同时输出到文件和标准错误流(stderr):
docker run -ti --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest sh -c "mysqld --log_error=/dev/stdout 2>&1 | tee /var/lib/mysql/mysql.error.log"
原理是让MySQL把错误日志输出到标准输出(stdout),再通过tee命令将内容同时写入目标日志文件,同时保留输出到stderr——Docker默认会收集容器的stdout和stderr到docker logs中。
方案二:通过MySQL配置+容器内日志转发实现
- 先创建自定义的MySQL配置文件
my.cnf,添加以下配置:
[mysqld] log_error = /var/lib/mysql/mysql.error.log
- 启动容器时挂载这个配置文件,同时启动一个后台进程用
tail实时把日志文件内容输出到stderr:
docker run -ti --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -v /path/to/your/my.cnf:/etc/mysql/my.cnf -d mysql:latest sh -c "mysqld & tail -f /var/lib/mysql/mysql.error.log >&2"
这样MySQL会正常把日志写入文件,tail命令实时读取文件内容并输出到stderr,既满足第三方应用读取文件的需求,也能通过docker logs查看日志。
注意:使用方案二时,要确保容器内tail命令可用,且日志文件路径和配置保持一致。
内容的提问来源于stack exchange,提问作者user1762087
相关产品推荐
相关产品推荐

