[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",写到第一列。

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

相关推荐
MickeyCV3 小时前
使用Docker部署MySQL&Redis容器与常见命令
redis·mysql·docker·容器·wsl·镜像
棠十一4 小时前
Rabbitmq
分布式·docker·rabbitmq
藥瓿亭5 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798325 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣5 小时前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
孔令飞5 小时前
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
ai·云原生·容器·golang·kubernetes
极简网络科技7 小时前
Docker、Wsl 打包迁移环境
运维·docker·容器
杨浦老苏7 小时前
轻量级Docker管理工具Docker Switchboard
运维·docker·群晖
江湖有缘7 小时前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
一加一等于二8 小时前
docker部署postgresql17,并且安装插件
docker·postgresql