Docker 容器无法启动解决方法(完整排查指南)

在使用 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 配置 + 服务依赖 + 环境变量


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部