如果是采用的手动安装docker,可能会遇到以下问题,你所安装的docker.service可能只有这个文件,其中依赖了docker.socket但是你并没有完整的docker.socket文件供你使用,就会出现下面的问题。
Failed to start docker.service: Unit docker.socket not found.
这说明:虽然 docker.service 文件存在,但它在 [Unit] 或 [Install] 部分中依赖了 docker.socket ,而该文件缺失。
这是 Docker 24.x 在某些安装方式下(尤其是从非官方源或不完整 repo 安装)可能出现的 systemd 配置不一致问题。
方案一:【个人推荐】手动创建缺失的 docker.socket 文件
运行以下命令创建标准的 docker.socket:
sudo tee /usr/lib/systemd/system/docker.socket <<'EOF'
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
步骤 1:确保 docker 用户组存在
docker.socket 配置中通常包含:
SocketGroup=docker
如果系统没有 docker 组,socket 启动会失败。
创建它:
sudo groupadd -f docker
-f 表示如果已存在则忽略错误。
将当前用户加入 docker 组,避免sudo执行权限问题
sudo usermod -aG docker $USER
刷新权限
newgrp docker
步骤 2:重载 systemd 并重试
# 重载配置
sudo systemctl daemon-reload
# 确保 docker 组存在
sudo groupadd -f docker
# 删除残留 socket 文件
sudo rm -f /var/run/docker.sock
# 启动 socket
sudo systemctl start docker.socket
# 检查状态
systemctl status docker.socket
如果 docker.socket active (listening) ,就成功了!
然后启动 Docker 服务(其实 socket 激活模式下不需要手动启 service,但可以):
sudo systemctl start docker
方案二:修改 docker.service,移除对 docker.socket 的依赖
如果你不需要 socket 激活(大多数服务器场景都不需要),可以直接编辑 service 文件:
sudo cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service.bak
sudo sed -i 's/Wants=docker.socket//g' /usr/lib/systemd/system/docker.service
sudo sed -i 's/After=docker.socket//g' /usr/lib/systemd/system/docker.service
然后重载并启动:
sudo systemctl daemon-reload
sudo systemctl start docker
⚠️ 注意:如果
docker.service 中有Requires=docker.socket,也要删掉。
