Docker缺少socket文件

结城 Docker 12 次阅读 529 字 发布于 2026-05-01 预计阅读时间: 2 分钟


如果是采用的手动安装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,也要删掉。

给时光以生命,给岁月以文明
最后更新于 2026-06-15