在使用 Docker 时,容器无法启动是最常见的问题之一。本文从日志、配置、资源、权限、镜像等多个维度,系统讲解排查与修复方法,适用于 Linux / Ubuntu / 服务器环境。
一、先确认:容器是否真的没启动
1. 查看容器状态
docker ps -a
重点看:
- STATUS(Exited / Restarting / Created)
- EXIT CODE(退出码)
2. 查看详细错误
docker inspect container_name
3. 查看日志(最重要)
docker logs container_name
👉 90% 的问题都在日志里
二、最常见原因与解决方法
1️⃣ 镜像问题(最常见)
❌ 现象
pull access denied
manifest not found
image not found
✔ 解决方法
重新拉取镜像
docker pull nginx:latest
指定正确版本
❌ 错误:
image: nginx:badtag
✔ 正确:
image: nginx:1.25
2️⃣ 端口冲突
❌ 现象
Bind for 0.0.0.0:80 failed: port is already allocated
✔ 解决方法
查看占用
sudo netstat -tulpn | grep 80
修改端口
ports:
- "8081:80"
3️⃣ 容器启动后立刻退出
❌ 现象
Exited (1)
Exited (137)
✔ 常见原因
(1)主进程退出
Docker 要求:
容器必须有前台进程
例如错误:
docker run ubuntu
容器直接退出。
✔ 解决方法
docker run -it ubuntu bash
或:
command: ["sleep", "infinity"]
4️⃣ 权限问题(Permission Denied)
❌ 现象
permission denied
cannot access /var/lib/docker
✔ 解决方法
加用户组
sudo usermod -aG docker $USER
newgrp docker
检查文件权限
ls -l
5️⃣ 容器内程序崩溃
❌ 现象
Exited (1)
Segmentation fault
✔ 排查方法
看日志
docker logs container_name
进入容器调试
docker run -it image_name bash
6️⃣ 内存不足(OOM Kill)
❌ 现象
Killed
Exit code 137
✔ 检查
dmesg | grep -i oom
✔ 解决
增加内存限制
deploy:
resources:
limits:
memory: 2G
7️⃣ 挂载目录错误
❌ 现象
no such file or directory
permission denied
✔ 检查
ls -l /host/path
✔ 修复
volumes:
- ./data:/app/data
8️⃣ Docker 服务问题
❌ 现象
Cannot connect to the Docker daemon
✔ 解决
sudo systemctl start docker
sudo systemctl restart docker
三、Docker Compose 常见启动问题
在 Docker Compose 中常见问题:
1. depends_on 不生效
原因:只控制启动顺序,不保证服务可用
解决:
healthcheck:
test: curl -f http://localhost
2. 配置错误导致全部失败
检查:
docker compose config
3. YAML 缩进错误
❌ 错误:
ports:
- 80:80
✔ 正确:
ports:
- "80:80"
四、快速排查流程(推荐)
遇到容器启动失败,按这个顺序:
✔ Step 1
docker ps -a
✔ Step 2
docker logs container
✔ Step 3
docker inspect container
✔ Step 4
检查:
- 端口
- 镜像
- 挂载
- 内存
- 权限
五、生产环境建议
1. 使用固定版本镜像
❌
image: nginx:latest
✔
image: nginx:1.25
2. 永远挂载数据
volumes:
- ./data:/data
3. 加 restart 策略
restart: unless-stopped
4. 日志监控
docker logs -f container
六、总结
Docker 容器无法启动,本质原因通常是:
配置错误 / 资源不足 / 镜像问题 / 进程退出
而 Docker Compose 的问题则更多集中在:
YAML 配置 + 服务依赖 + 环境变量