首先确认Docker服务是否正常运行,使用以下命令:
sudo systemctl status docker
若服务未启动,通过sudo systemctl start docker启动服务。
容器日志是调试应用问题的核心入口,常用命令如下:
docker logs <container_id_or_name>
tail -f):docker logs -f <container_id_or_name>
docker logs --since 30m <container_id_or_name>
docker logs -n 100 <container_id_or_name>
journalctl -u docker.service --since "2025-11-01" --until "2025-11-05" --follow -o cat | grep <container_id_or_name>
以上命令可帮助定位容器内应用的错误输出。Docker Daemon的调试日志能提供更详细的运行时信息,有两种开启方式:
daemon.json文件(位于/etc/docker/),添加"debug": true:{
"debug": true,
"log-level": "debug" // 可选:debug/info/warn/error/fatal
}
保存后,向Daemon发送HUP信号重载配置:sudo kill -SIGHUP $(pidof dockerd)
-D参数重启(会中断现有容器):sudo dockerd -D
调试日志会输出到系统日志(/var/log/daemon.log或journalctl -u docker.service)。若Docker Daemon无响应,可通过发送SIGUSR1信号强制生成堆栈回溯,帮助定位死锁或阻塞问题:
sudo kill -SIGUSR1 $(pidof dockerd)
堆栈信息会追加到Daemon日志中,可通过上述日志查看命令获取。
资源不足(CPU、内存、磁盘)是Docker容器故障的常见原因,使用以下命令排查:
top
docker stats <container_id_or_name>
df -h
若容器内存超出限制,可通过docker stats确认并调整容器内存限制(-m参数)。确认Docker配置是否正确,主要检查/etc/docker/daemon.json文件(若不存在则创建),确保无语法错误(如多余的逗号、无效的键值对)。常见配置项包括日志驱动、存储驱动、镜像加速等。
Docker依赖overlay2(默认存储驱动)或aufs等内核模块,若模块未加载会导致容器无法启动。使用以下命令检查:
lsmod | grep overlay # 检查overlay模块
lsmod | grep aufs # 检查aufs模块(旧版本Docker可能使用)
若模块未加载,通过sudo modprobe overlay加载(需root权限)。
若需调试容器内运行的应用程序(如C/C++程序),需在容器内安装调试工具并连接:
进入容器:
docker run -it --name debug debian /bin/bash
更新包列表并安装GDB:
apt-get update && apt-get install -y gdb
获取应用PID:
ps aux | grep <application_name>
连接GDB:
gdb -ex "set follow-fork-mode child" -p <PID>
常用GDB命令:
b <function_name>:在指定函数设置断点r:运行程序s:单步执行print <variable>:查看变量值c:继续执行注意:若应用无调试信息,需使用-g参数重新编译(如gcc -g main.c -o main)。
避免日志文件过大占用磁盘空间,可通过daemon.json配置日志轮转:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m", // 单个日志文件最大10MB
"max-file": "3" // 保留3个日志文件
}
}
修改后重启Docker服务使配置生效:sudo systemctl restart docker。
以上方法覆盖了Debian环境下Docker调试的主要场景,从基础服务状态检查到深入的容器内调试,可根据具体问题选择对应步骤。