改变容器存储位置后启动mongo失败,报错Failed to unlink socket file tmpmongodb-27017
一. 改变容器存储位置
默认存储位置是/var/lib/docker
1.停止docker
systemctl stop docker
有时候会报错Warning: Stopping docker.service, but it can still be activated by: docker.socket
需要执行systemctl stop docker.socket
Docker 有两个服务进程文件,可以通过cd /lib/systemd/system/ && ll|grep docker查看,分别是docker.service 和 docker.socket,上面的警告意味着如果你试图停止docker服务,但docker.socket还处于激活状态。
https://blog.51cto.com/wutengfei/2946943
注意:
我执行的时候是先docker-compose down删掉了所有容器,下次可以试下只停止容器docker stop `docker ps -q`
然后再停掉docker,可能更方便
2.创建新的存储路径
mkdir -p /data/docker
3.迁移路径
rsync -avz --progress /var/lib/docker /data/docker
这个命令会把/var/lib/docker下的文件全部传输到/data/docker目录下,若/data/docker的子目录docker不存在会自动创建,存在也行。
参数说明:
--progress显示传输进度
-v, –verbose详细模式输出。
-a, –archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。
-z, –compress对备份的文件在传输时进行压缩处理。
4.编辑daemon.json文件
cat /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
5.载入配置文件并启动
systemctl daemon-reload && systemctl restart docker
二. 启动mongo失败
docker镜像存储位置改变后,启动mongo失败,报错Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
解决方法:使用docker inspect 容器名,找到下面信息
cd /data/docker/overlay2/1f62bf8c5c479319b86b31cb81763279655144420572c2600af4be684ecfe9ab
cd diff/tmp && rm mongodb-27017.sock
说明:
diff目录为容器的读写层,容器内修改的文件都会在diff中出现,merged目录为分层文件联合挂载后的结果,也是容器内的工作目录
然后重启mongo即可
努力生活,融于自然