[k8s]报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock

背景:使用docker命令的时候,报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock

解释:/var/run/docker.sock文件,简单理解就是docker命令和docker守护进程之间,进行调用的一个凭证,如果你的docker守护进程没启动,或者该文件没有权限,那都调用不通,就会报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock

解决思路①:

检查一下docker有没有启动:

复制代码
# systemctl status docker

如果只是没有启动docker,那就简单了,启动一下就可以了。如果你已经启动了,也可以尝试重启一下,不影响:

复制代码
# systemctl restart docker

解决思路②:

查看该文件有没有权限,是不是存在:

复制代码
# ls -lh /var/run/docker.sock

该文件在启动docker的时候,会自动创建,如果你已经重启了,那一定存在。权限是660,属于docker组,root用户。

当你不用root用户启动的时候,如ubuntu,应该使用:

在ubuntu用户下,且ubuntu用户有sudo权限:

复制代码
sudo usermod -aG docker ubuntu

在root用户下:

复制代码
usermod -aG docker ubuntu

解决思路③:

重装docker

复制代码
#!/bin/bash

# 停止 Docker 服务
sudo systemctl stop docker

# 卸载 Docker 相关的软件包
sudo apt-get remove --purge docker-engine docker docker.io containerd runc

# 自动清理不再需要的包和依赖
sudo apt-get autoremove -y

# 清理旧的 Docker 配置文件
sudo rm -rf /etc/docker/

# 重新安装 Docker 的依赖项
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置 Docker 的存储库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

# 启动 Docker 服务
sudo systemctl start docker

# 验证 Docker 是否正确安装
sudo docker run hello-world

echo "Docker reinstallation is complete. Your images and containers should be intact."

将上述脚本保存为 reinstall_docker.sh,然后通过在终端运行以下命令来执行脚本:

复制代码
chmod +x reinstall_docker.sh
./reinstall_docker.sh

请注意,这个脚本不会删除你的镜像和容器,但是它会删除 Docker 的配置文件(例如在 /etc/docker/ 目录下的文件)。

解决思路④:

如果以上都没有解决,那么你一定遇到了和我一样奇葩的问题,用户有docker命令的权限,且对/var/run/docker.sock也有权限,dockerd也是正常启动了!但仍然报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock

那么,我有一个方案,能够立刻快速解决,手动启动dockerd,并改变docker命令和dockerd的互通,100%成功:

复制代码
#先把dockerd停了
systemctl stop docker.service 
systemctl stop docker.socket 

#手动启动dockerd,这类加了两个监听,一个是本机2375端口,一个是/var/run/docker.sock。
/usr/bin/dockerd -H 127.0.0.1:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock

#启动之后,你就可以看到2375端口已经已经打开了:
netstat -nutlp|grep dockerd
#tcp        0      0 127.0.0.1:2375          0.0.0.0:*         LISTEN       23443/dockerd 

#现在在控制台,改一下docker命令的环境变量:
export DOCKER_HOST=tcp://127.0.0.1:2375
docker ps 
#成功

如果你希望其他用户或者脚本要长期调用,export DOCKER_HOST="tcp://127.0.0.1:2375"可以写到 /etc/profile中。

如果是crontab使用,则把DOCKER_HOST="tcp://127.0.0.1:2375",写到第一列。

如果有其他解决办法的大佬,请给我,谢谢。

相关推荐
ghostwritten1 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
Zero_to_zero12342 小时前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器
@郭小茶2 小时前
docker-compose方式部署docker项目
运维·docker·容器
duration~3 小时前
K8S自定义CRD
容器·贪心算法·kubernetes
程序员 小柴4 小时前
docker的与使用
java·docker·eureka
ghostwritten5 小时前
Docker Registry Clean
运维·docker·容器
宋冠巡6 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
小马爱打代码6 小时前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
阿噜噜小栈7 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
云上艺旅7 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher