Docker容器日志查看

Docker容器日志查看

引言

容器启动报错、服务运行异常时,不能进容器盲目找文件,第一时间用docker logs查看标准输出日志。应用把日志打到stdout/stderr,Docker统一收集,是容器排错最常用入口。

基础查看命令

#查看全部日志
docker logs 容器名或ID

#实时跟踪最新日志,类似tail -f
docker logs -f 容器名

#只看最近100行
docker logs --tail 100 容器名

#查看某时间之后日志
docker logs --since 30m 容器名
docker logs --since 2026-10-18T07:00:00 容器名

#带时间戳
docker logs -t 容器名

常用组合

#实时跟踪并显示时间戳、最近50行
docker logs -f -t --tail 50 myapp

排查重启循环、接口报错时,先tail看最后报错,再结合时间过滤。

日志原理

Docker默认把容器标准输出保存到本地json-file驱动,存在宿主机/var/lib/docker/containers目录。应用要把日志输出到控制台,而不是只写容器内文件,才能被docker logs抓到。

日志注意事项

  • 默认json-file不限制大小,长时间运行会占满磁盘,生产配置日志轮转:
    {"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}}
  • 需要长期分析的日志,接入ELK等集中日志系统;
  • 容器删除后默认日志随之丢失;
  • 应用内部业务日志建议挂载到宿主机目录持久化。

总结

docker logs是容器排错第一命令,-f跟踪、--tail取尾部、--since按时间过滤。生产配置大小轮转避免磁盘写满,业务重要日志持久化或集中采集。


emer 发布于  2026-10-18 07:26 

Docker容器启动失败,查看容器日志排查错误

前言

Docker容器启动后马上就退出了,不知道为什么。本文讲怎么查看容器日志,排查启动失败的原因。

一、查看容器状态

列出所有容器

docker ps -a

看STATUS列:

  • Up 就是正常运行
  • Exited (1) 就是异常退出了

查看指定容器状态

docker ps -a | grep 容器名

二、查看容器日志

基本用法

docker logs 容器名/容器ID

实时查看日志

docker logs -f 容器名

查看最后100行

docker logs --tail 100 容器名

带时间戳

docker logs -t 容器名

查看最近10分钟的日志

docker logs --since 10m 容器名

三、常见启动失败原因

原因1:程序启动就退出

比如你跑的是个命令行程序,执行完就退出了,容器当然也跟着退。

解决: 前台运行程序,别后台跑。

# 错误:后台运行
CMD service nginx start

# 正确:前台运行
CMD nginx -g "daemon off;"

原因2:配置文件错误

比如nginx配置写错了,启动失败。

日志里会有:

nginx: [emerg] unknown directive "xxx"

解决: 根据日志提示改配置。

原因3:端口被占用

宿主机的端口已经被别的程序占了。

日志里会有:

Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use

解决: 换个端口,或者把占用端口的程序关掉。

# 查谁占用了80端口
netstat -tlnp | grep :80

原因4:挂载的文件不存在

-v挂载的宿主机路径不存在。

日志里会有:

no such file or directory

解决: 先创建宿主机目录。

mkdir -p /data/www

原因5:权限问题

挂载的目录权限不对,程序读不了。

日志里会有:

Permission denied

解决: 改目录权限:

chmod 755 /data/www

原因6:环境变量没设

程序需要的环境变量没传进去。

日志里会有:

Environment variable XXX is not set

解决: 启动时传环境变量:

docker run -e MYSQL_ROOT_PASSWORD=123456 mysql

四、排查步骤

第一步:看状态

docker ps -a

确认容器是Exited状态。

第二步:看日志

docker logs 容器名

日志最后几行就是报错原因。

第三步:进容器看

如果日志不够详细,进容器里手动跑:

docker run -it 镜像名 /bin/bash

进去后手动执行启动命令,看报什么错。

第四步:检查配置

挂载的配置文件对不对,环境变量有没有。

五、常用命令汇总

命令 说明
docker ps -a 看所有容器状态
docker logs 容器名 看日志
docker logs -f 容器名 实时看日志
docker logs --tail 100 容器名 看最后100行
docker inspect 容器名 看容器详细信息
docker exec -it 容器名 /bin/bash 进运行中的容器
docker run -it 镜像 /bin/bash 用镜像开个交互式容器

六、查看容器详细信息

docker inspect 容器名

能看到挂载、环境变量、网络等所有信息。

只看挂载信息

docker inspect -f '{{.Mounts}}' 容器名

只看启动命令

docker inspect -f '{{.Config.Cmd}}' 容器名

常见坑

坑1:容器启动马上退出,日志是空的

docker logs 容器名

什么都没有。

原因: 程序本身就没输出,或者启动太早就挂了。

解决: 用 docker run -it 镜像 /bin/bash 进去手动跑。

坑2:改了配置不生效

改了挂载的配置文件,重启容器还是不生效。

原因: 容器没真正重启,或者配置文件路径不对。

解决: 强制重启:

docker restart 容器名

坑3:日志一直刷,停不下来

docker logs -f 容器名

日志一直在刷。

解决: 按 Ctrl+C 退出。

坑4:容器删除了日志就没了

容器删了,日志也跟着没了。

解决: 重要日志挂载到宿主机。

坑5:看日志找不到容器ID

容器太多,不知道哪个是哪个。

解决: 启动的时候给容器起个好记的名字:

docker run --name mynginx -d nginx

总结

排查三步:

  1. docker ps -a 看容器状态
  2. docker logs 容器名 看报错
  3. 按日志提示改问题

记住: 容器启动失败别慌,看日志就行,日志里都写了原因。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:01 
'); })();