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

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

相关推荐
Lvan的前端笔记12 分钟前
docker:基于docker的前端部署方案
前端·docker·状态模式
承渊政道18 分钟前
自建服务越来越多怎么管理?Docker部署Flare,搭一个自己的数字入口
运维·docker·容器·内网穿透·cpolar·nas·flare
龙腾-虎跃1 小时前
Docker 一键启动服务合集:Redis、MySQL、Kafka、MinIO、Prometheus 等(网盘转存防失效)
redis·mysql·docker·kafka·prometheus·小龙虾·miniio
芷栀夏1 小时前
极空间部署Photopea:Docker运行、网页修图与多设备使用
运维·docker·容器
JeJe同学11 小时前
Docker镜像导入、容器启动
linux·运维·docker
谢亮_vipxieliang14 小时前
Kubernetes 1.36 深度解读:从 kubelet 安全到 GPU 原生调度的 70 项改进
安全·kubernetes·kubelet
元Y亨H16 小时前
基于 Jenkins + Docker 的前端(Vben Admin)CI/CD 踩坑
docker·jenkins
wzq11_66617 小时前
kubernetes集群——灰度发布
云原生·容器·kubernetes
白兰地空瓶17 小时前
项目要上线了,我连夜学完 Docker:从底层原理到容器化部署全记录
docker·全栈
Knight_AL19 小时前
PostgreSQL Docker 数据库备份:pg_dump 与 SQL 格式备份的区别
数据库·docker·postgresql