Docker容器崩溃自动删除,如何捕获其STDOUT至宿主机文件?
解决Docker容器崩溃自动删除后无法获取日志的问题
禁用容器自动删除
如果启动容器时加了--rm参数,去掉它。容器崩溃停止后不会被自动删除,之后用docker logs <容器ID/容器名>就能查看完整日志。
- 调整后命令示例:
docker run my-image
直接重定向输出到宿主机文件
启动容器时把STDOUT和STDERR直接重定向到宿主机的文件里,哪怕容器被删除,文件依然保留:
- 命令示例:
docker run --rm my-image > /宿主机路径/container.log 2>&12>&1是把错误输出也合并到日志文件里,避免遗漏关键报错信息
用Docker日志驱动持久化日志
配置Docker使用local这类持久化日志驱动,容器删除后日志仍会保存在宿主机上:
单容器临时配置
- 启动命令:
docker run --rm --log-driver local --log-opt max-size=10m --log-opt max-file=3 my-image
全局配置(所有容器生效)
- 编辑
/etc/docker/daemon.json,添加以下内容:{ "log-driver": "local", "log-opts": { "max-size": "10m", "max-file": "3" } } - 重启Docker服务:
systemctl restart docker(Linux环境)
交互模式实时排查
如果容器启动后很快崩溃,尝试用交互模式启动容器,手动触发应用运行,实时看输出:
- 命令示例:
docker run --rm -it my-image sh(需镜像内置shell环境)- 进入容器后执行启动应用的命令,直接观察崩溃时的报错信息
内容的提问来源于stack exchange,提问作者Jeffrey Tillwick
相关产品推荐
相关产品推荐

