当 Docker 无法启动镜像时,可能是由多种原因导致的。以下是详细的排查步骤和解决方案:
Error: No such image: image-name
解决方案:
- 检查镜像名称和标签是否正确
- 使用 docker images
确认本地镜像列表
- 如果需要,重新拉取镜像:docker pull image-name:tag
Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
解决方案:
- 更改容器端口映射:docker run -p 8080:80 image-name
- 查找并停止占用端口的进程:
bash
sudo lsof -i :80
sudo kill -9 <PID>
Error response from daemon: failed to create task for container: failed to create shim task
解决方案:
- 检查 Docker 存储驱动:docker info | grep "Storage Driver"
- 尝试更改存储驱动(在 /etc/docker/daemon.json
中):
json
{
"storage-driver": "overlay2"
}
- 重启 Docker 服务:sudo systemctl restart docker
Got permission denied while trying to connect to the Docker daemon socket
解决方案:
- 将当前用户加入 docker 组:
bash
sudo usermod -aG docker $USER
newgrp docker
- 或者使用 sudo 运行命令:sudo docker ...
Cannot start container: [8] System error: not enough memory
解决方案:
- 检查系统资源:docker system df
- 清理无用资源:docker system prune
- 增加 Docker 资源限制(在 Docker Desktop 设置中)
检查 Docker 服务状态:
systemctl status docker
sudo systemctl restart docker
查看详细错误日志:
docker logs <container-id> # 对于已创建但未运行的容器
journalctl -u docker -n 50 # 查看 Docker 服务日志
尝试以交互模式运行:
docker run -it --rm image-name /bin/bash
检查镜像完整性:
docker inspect image-name
docker history image-name
验证容器配置:
docker inspect <container-id>
如果遇到文件系统相关错误:
docker run --storage-opt size=50G image-name
临时禁用 SELinux:
sudo setenforce 0
确保内核版本满足 Docker 要求(一般需要 3.10 以上):
uname -r
作为最后手段:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker
希望这些解决方案能帮助您解决 Docker 无法启动镜像的问题。如果问题仍然存在,请提供具体的错误信息以便进一步诊断。