ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

环境

操作系统:CentOS 7
Docker版本:Docker version 20.10.10

问题

docker更改默认存储目录,CentOS默认存储目录位置:/var/local/docker,需要更改至其他挂载目录,比如更改到/data/docker,发现迁移之后所有docker命令都用不了了

更改存储位置

1.停止docker服务

systemctl stop docker

2.打包备份docker原文件,建议先备份,以防万一

cd /var/lib/

打包备份

tar -cvf docker.tar docker/

3.移动文件

mv /var/lib/docker /data/

4.修改默认存储位置,在图中标注红框位置加上–graph=/data/docker 指定存储位置,保存并退出

vim /usr/lib/systemd/system/docker.service


正确配置

ExecStart=/usr/bin/dockerd --graph=/data/docker -H fd:// --containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock

重启

systemctl daemon-reload && systemctl start docker

查看存储位置

docker info|grep Dir
[root@linux ~]# docker info|grep Dir
 Docker Root Dir: /var/lib/docker

解决题目错误

一切都是想象的那么顺利,然后启动后发现容器都没了,存储路径是改变了,这里容易犯错的地方是在移动的地方
正确的是mv /var/lib/docker /data/
错误的移动mv /var/lib/docker /data/docker
看出问题了吗,就是在后面路径多加一层docker,这样执行之后路径便是/data/docker/docker,所以报找不到。
如果此时你并没有报找不到容器,而是报以下错误,docker服务能正常启动,但是所有docker命令都用不了,执行任何docker命令都报以下错误
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决办法
修改

vim /usr/lib/systemd/system/docker.service

查看ExecStart,如果和下面一样,
ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
在最后面添加:-H unix:///var/run/docker.sock
添加之后
ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock
重启docker服务器

systemctl daemon-reload && systemctl start docker

所有docker命令都无法使用这个问题搞了好几个小时没解决,最后同事给解决了