改变容器存储位置后启动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即可

参考:https://www.cnblogs.com/innocenter/p/17084776.html

posted @ 2023-03-08 10:40  坚强的小蚂蚁  阅读(294)  评论(0编辑  收藏  举报