docker客户端与守护进程默认通过unix域套接字/var/run/docker.sock通信,需确保dockerd监听该socket且当前用户属于docker组并拥有读写权限。
docker 客户端与守护进程默认就使用 unix domain socket 通信,无需额外配置即可工作。关键在于确保守护进程正确监听 /var/run/docker.sock,且客户端有权限访问该文件。
Unix socket 是 Docker 的默认通信方式
Docker 守护进程(dockerd)启动时,只要没显式禁用或覆盖 -H 参数,就会自动创建并监听 /var/run/docker.sock。这个文件是本地进程间高效、安全通信的载体,不走网络,也不依赖 IP 或端口。
守护进程侧:确认 socket 监听已启用
-
检查当前 dockerd 启动参数:
ps aux | grep dockerd
正常应看到类似
dockerd -H unix:///var/run/docker.sock或不含-H(即默认启用)。 -
查看配置文件
/etc/docker/daemon.json:
若存在,内容应至少包含:{ "hosts": ["unix:///var/run/docker.sock"] }或留空(默认行为即启用 Unix socket)。
⚠️ 注意:若该文件中只写了"hosts": ["tcp://..."],则 Unix socket 会被完全禁用,需手动补上。 -
重启守护进程生效(改配置后):
sudo systemctl restart docker
客户端侧:确保能读写 socket 文件
-
验证 socket 文件存在且可访问:
ls -l /var/run/docker.sock
输出应类似:
srw-rw---- 1 root docker 0 Sep 15 20:00 /var/run/docker.sock
其中docker是组名,普通用户需属于该组。 -
将当前用户加入
docker组(避免每次用sudo):
Docker Image Puller下载使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
sudo usermod -aG docker $USER newgrp docker # 立即生效组权限(或重新登录终端)
-
测试连接是否正常:
docker info | head -5
成功返回信息说明客户端已通过 Unix socket 与守护进程通信。
特殊情况处理
-
如果遇到
permission denied错误:- 检查用户是否在
docker组 - 确认
/var/run/docker.sock所属组确实是docker(不是root单独所有) - 必要时手动修复权限:
sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock
- 检查用户是否在
不建议手动指定
-H unix:///var/run/docker.sock运行客户端命令(如docker -H unix://... ps),除非调试需要。日常使用直接docker ps即可,CLI 会自动使用默认 socket。
不复杂但容易忽略










