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

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

相关推荐
老衲の少女心1 小时前
【容器】k8s学习笔记基础部分(三万字超详细)
笔记·学习·kubernetes
LeonNo111 小时前
k8s,诞生历史
云原生·容器·kubernetes
古人诚不我欺1 小时前
kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
云原生·容器·kubernetes
爱学测试的李木子4 小时前
Docker常用命令总结~
运维·软件测试·测试工具·docker·容器
流穿5 小时前
ELK系列-(五)指标收集-MetricBeat(上)
ubuntu·elk·elasticsearch·docker
元气满满的热码式6 小时前
Centos7.9安装docker
运维·docker·容器
stevenjoo676 小时前
UNIX简史
unix
码农秃头老李7 小时前
系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)
linux·kubernetes·centos
魏 无羡7 小时前
linux CentOS系统上卸载Kubernetes(k8s)
linux·kubernetes·centos