RHEL 8.3下Docker命令无法连接守护进程(容器仍运行)求助
Docker守护进程运行正常但CLI无法连接的无重启修复方案
临时修复(无需重启dockerd)
1. 验证socket文件有效性
先确认dockerd实际使用的socket与系统中存在的socket是否一致:
- 查看当前
docker.sock的inode:ls -i /var/run/docker.sock - 查看dockerd进程持有的socket文件信息:
lsof -p $(pidof dockerd) | grep docker.sock
对比两者的inode值,如果不一致,说明系统中的docker.sock是无效的旧文件,直接删除后dockerd会自动重建有效socket:
rm -f /var/run/docker.sock
等待10秒后执行docker info测试连接。
2. 手动关联进程持有的socket
如果删除旧socket后dockerd未自动重建,可直接将dockerd进程正在使用的socket文件描述符链接到系统路径:
# 获取dockerd进程的socket文件描述符 SOCK_FD=$(lsof -p $(pidof dockerd) | grep docker.sock | awk '{print $4}') # 创建软链接 ln -sf /proc/$(pidof dockerd)/fd/$SOCK_FD /var/run/docker.sock
执行后立即测试docker info,即可恢复CLI连接。
3. 临时指定连接路径
如果上述方法无效,尝试直接指定dockerd的连接端点(若dockerd启动时配置了TCP监听,可替换为对应TCP地址):
docker -H unix:///var/run/docker.sock info
若能成功,可临时设置环境变量让所有docker命令默认使用该路径:
export DOCKER_HOST="unix:///var/run/docker.sock"
长期预防方案
1. 用systemd管理dockerd进程
不要用/usr/bin/dockerd &直接后台启动,创建systemd服务文件稳定管理进程:
创建/etc/systemd/system/docker.service文件,内容如下:
[Unit] Description=Docker Application Container Engine After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
执行以下命令启用服务:
systemctl daemon-reload systemctl enable --now docker
systemd会自动维护socket文件的有效性,避免出现文件与进程关联失效的问题。
2. 配置容器自动重启
确保所有业务容器添加自动重启策略,避免dockerd意外重启时容器停止:
# 对现有容器配置自动重启 docker update --restart=always <容器ID/名称> # 新建容器时添加参数 docker run --restart=always ...
内容的提问来源于stack exchange,提问作者amol jire
相关产品推荐
相关产品推荐

