Amazon Linux(p2)实例Docker启动失败问题求助
我先理下你的情况:用的是Amazon Linux (p2)实例,Docker版本是17.03.2-ce,关闭运行容器的screen会话后就出问题了——sudo docker ps连不上daemon,sudo service docker status显示docker dead but subsys locked,你试过删目录、清文件、重启服务甚至EC2实例都没搞定。
下面给你几个更深入的排查和修复步骤,你可以逐一尝试:
1. 先看Docker日志找根源
首先得搞清楚daemon为啥启动失败,日志里肯定有线索,先查日志:
sudo cat /var/log/docker.log
如果系统支持journalctl,也可以用这个命令看更详细的服务日志:
sudo journalctl -u docker.service
日志里会明确告诉你是权限问题、依赖挂了还是配置出错,这能帮我们精准解决问题。
2. 彻底清理残留进程和锁文件
有时候只删/var/run/docker.*不够,得把所有相关的残留都清干净:
- 先杀掉所有Docker相关的进程:
sudo pkill -f docker
- 把Docker的锁文件、套接字、pid文件全删掉:
sudo rm -rf /var/run/docker /var/run/docker.sock /var/run/docker.pid /var/lock/subsys/docker
- 然后再启动Docker服务:
sudo service docker start
3. 检查存储驱动是否出问题
你用的是比较老的Docker版本(17.03),和存储驱动(比如devicemapper)容易出兼容性问题。先看看当前的存储驱动配置:
sudo cat /etc/docker/daemon.json
如果没这个文件或者配置有问题,可以试试重置存储驱动——不过注意,这个操作会删掉所有本地镜像和容器,一定要先备份重要数据:
sudo service docker stop sudo rm -rf /var/lib/docker sudo service docker start
4. 排查SELinux的影响
Amazon Linux默认是开启SELinux的,有时候它会阻止Docker daemon正常运行,你可以先临时关掉SELinux测试:
sudo setenforce 0
如果关掉后Docker能正常启动,那就是SELinux策略的问题。你可以修改SELinux规则,或者把它改成宽容模式(编辑/etc/selinux/config,把SELINUX=enforcing改成SELINUX=permissive,然后重启系统)。
5. 重装Docker(最后一招)
如果上面的方法都没用,那就只能重装Docker了:
- 先卸载现有Docker:
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
- 然后安装你原来的版本17.03.2-ce:
sudo yum install docker-17.03.2-ce
- 安装完启动服务并设置开机自启:
sudo service docker start sudo chkconfig docker on
每一步做完都用sudo service docker status和sudo docker ps检查下是否恢复正常。
内容的提问来源于stack exchange,提问作者avithecatsgt

