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

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

相关推荐
资源开发与学习2 天前
Kubernetes集群核心概念 Service
kubernetes
muyun28002 天前
Docker 下部署 Elasticsearch 8 并集成 Kibana 和 IK 分词器
elasticsearch·docker·容器
Nazi62 天前
k8s的dashboard
云原生·容器·kubernetes
傻傻虎虎2 天前
【Docker】常用帮忙、镜像、容器、其他命令合集(2)
运维·docker·容器
是小崔啊2 天前
叩丁狼K8s - 概念篇
云原生·容器·kubernetes
2401_897930062 天前
使用Docker轻松部署Neo4j图数据库
数据库·docker·neo4j
summer_west_fish2 天前
2023年系统分析师上半年论文试题分析
kubernetes
LeeZhao@2 天前
【AI推理部署】Docker篇04—Docker自动构建镜像
人工智能·docker·容器
程思扬2 天前
利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
网络·人工智能·经验分享·docker·信息可视化·容器·架构
落日漫游3 天前
dockercompose和k8s区别
docker·kubernetes