1.查看docker镜像存放目录空间大小
du -hs /var/lib/docker/
2.停止docker服务。
systemctl stop docker
3.查看磁盘容量大的空间,且在上面创建新的docker目录。
df -h
mkdir -p /mnt/www/docker/lib
4.迁移/var/lib/docker目录下的文件到新创建的目录/mnt/www/docker/lib
rsync -avz /var/lib/docker /mnt/www/docker/lib
5.编辑 /etc/docker/daemon.json 添加如下参数
{
"graph": "/data/docker/lib/docker"
}
6.重新加载docker,并重启docker服务。
systemctl daemon-reload && systemctl restart docker
systemctl daemon-reload
systemctl restart docker.service
systemctl status docker.service
7.检查docker是否变更为新目录/mnt/www/docker/lib
[root@localhost ~]# docker info
...
Docker Root Dir: /data/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
...
8.删掉docker旧目录
rm -rf /var/lib/docker
常见docker清理方法
docker system df 类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker
问题
故障分析
Docker 有两个服务进程文件,可以通过cd /lib/systemd/system/ && ll|grep docker查看,分别是docker.service unit file 和 docker.socket unit file,上面的警告意味着如果你试图停止docker服务,但docker.socket unit file还处于激活状态。
解决方法
停止 docker socket
# 停止 docker 服务
sudo systemctl stop docker.socket
sudo systemctl stop docker.service
# 启动 docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker.service
删除 docker socket 文件
如果上面”温和“方法并没有解决你的问题,我们可以采用下面”暴力“方法。
# 删除 docker socket 文件
cd /lib/systemd/system/ && rm -rf docker.socket
# 查看 docker 状态,已dead
sudo systemctl status docker.service
# 重新创建 docker.socket
cd /lib/systemd/system/
vim docker.socket
# 添加如下内容
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
# 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker.service
此时,再进行 docker 相关操作,比如:停止、启动、重启,均可正常执行。