«

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

时间:2026-10-8 08:01     作者:emer     分类: 无


前言

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

一、查看容器状态

列出所有容器

docker ps -a

看STATUS列:

查看指定容器状态

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 协助处理

标签: Docker 容器日志 启动失败 docker logs 排查错误