1.docker 默认存储路径为根目录,存储空间爆了,导致各个docker服务都启动不起来,所以要做docker更改默认存储路径,使用的是宝塔的linux面板环境。
2.根据度娘资料进行存储路径迁移。
a.容器存储路径都位于/var/lib/docker中
b.停止docker systemctl stop docker
c.创建要迁移的目录路径 ,本人迁移到了/www/lib/docker目录下的。使用命令复制文件到目标文件夹里面:
cp -R /var/lib/docker/* /www/lib/docker/
d.复制完毕后,重要的需要把docker配置文件里面默认存储路径指向为我们迁移的目录路径:
配置 /etc/systemd/system/docker.service.d/devicemapper.conf
查看/etc/systemd/system/docker.service.d目录及devicemapper.conf是否存在。如果不存在,就新建。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/www/lib/docker/
e.配置完毕后,可以删除原先docker的默认存储路径 /var/lib/docker 整个文件夹了。
6.重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
7.使用命令docker info查看是否已修改默认存储路径
8.问题出现:
重启docker后,docker-compose启动的程序和redis等build的容器都能启动成功,就是mysql 相关的容器不能启动成功一直在restart。查看日志说什么没有权限在tmp文件中写入,真是奇怪了。
9.根据度娘,尝试的几种方法都不能成功启动。
第一种:
使用 sudo chown 999:999 /tmp 无效
使用 sudo chown 777 $PWD/temp 无效
第二种:
修改docker容器内的mysql 配置文件mysqld.cnf,说是增加指向mysql 临时文件路径,但是还是无效。
将docker 的mysql 配置文件拷贝到宿主机路径,
docker cp container-mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /www/wwwroot/mysql
下载下来修改
在[mysqld] 下增加 tmpdir = /www/wwwroot/api.hente.cn/mysql/temp
然后再复制覆盖docker mysql 的然后重启mysql容器
docker cp /www/wwwroot/mysql/mysqld.cnf container-mysql:/etc/mysql/mysql.conf.d/mysqld.cnf
第三种:直接执行修改宿主机的 chmod 777 /tmp 命令,无效。
10. 解决思路:
根据日志文件提示,确实 /tmp 无权限写入,但是它不应该是宿主机上的 /tmp文件,更加不应该是某个mysql容器中的 /tmp 文件,而是整个docker 相对路径中的 /tmp 文件。
所以问题是出在了我们迁移的docker存储路径中,查看一翻确实,迁移中的docker目录下有个 /tmp 的目录,但是单单给 /tmp 目录添加 777权限还是无效。
应在迁移目录的最顶目录中授权777权限。
11.结语:
重启mysql容器即可重新启动成功,但是其他容器启动和redis启动都能写入这个/tmp文件夹里面,就单单mysql容器不行。对比未迁移前docker的存储目录的权限都是755 权限的也并未出现这种问题。容器启动起来了,具体问题原因可能会被发现,先这样吧。