1. 问题现象与初步排查
最近在维护一套生产环境的Docker服务时遇到一个典型问题:系统重启后,虽然docker服务状态显示为active (running),但执行docker ps -a命令时容器列表却显示为空。更棘手的是,这个问题在每次系统重启后都会复现,导致需要手动恢复容器运行状态。
首先确认基础环境信息:
- 操作系统:Ubuntu 20.04 LTS
- Docker版本:20.10.12
- 存储驱动:overlay2
- 容器启动方式:通过systemd管理的docker.service
通过以下命令验证服务状态:
bash复制systemctl status docker # 显示active (running)
docker info # 显示Docker引擎运行正常
docker ps -a # 返回空列表
关键提示:当遇到这种"服务正常但功能异常"的情况时,首先要排查的是Docker的运行时状态与数据存储路径是否正常。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 根因分析与定位
2.1 存储目录检查
Docker默认将容器数据存储在/var/lib/docker目录下。通过以下命令检查该目录状态:
bash复制sudo ls -l /var/lib/docker/containers
发现该目录为空,这与预期不符——正常情况即使容器停止运行,其元数据也应保留。
进一步检查发现系统存在两个可疑现象:
/var/lib/docker被挂载为tmpfs(内存文件系统)- 存在
/etc/docker/daemon.json配置文件指定了非标准数据目录
2.2 配置文件溯源
检查docker服务启动配置:
bash复制sudo systemctl cat docker
发现关键配置片段:
code复制[Service]
ExecStart=/usr/bin/dockerd --data-root /mnt/docker_data
同时存在/etc/docker/daemon.json文件内容:
json复制{
"data-root": "/data/docker"
}
这种配置冲突导致Docker
