话不多说,进入正题,有一个bug,一直提示找不到文件夹,一顿排查后发现是file.mkdir()只能在app容器中创建目录,无法在宿主机中创建,于是我将目录与宿主机做了一个卷映射。但现在最新的问题来了:
备份语句执行失败
可疑点一:由于之前是可以执行的,尝试将卷映射去掉看看
失败:难道之前只是在命令行执行,并没有部署上去执行?果然不记录就会开始怀疑(想起来了,确实没有部署过)
找到原因:其实想想为什么提示docker不存在?是因为springboot的jar包中的容器中没有这个命令,
那么其实只要将这个命令放到宿主机中运行即可
可疑点二:代码添加了一行时区,虽然可能性不大,但我决定试试(现在想想,其实也是没有办法的办法了哈哈,但凡有点想法,也不至于这样排查啊)
解决方案:
借助docker in docker 的思路应该可以解决
参考链接:在docker容器中调用和执行宿主机的docker
经过验证,还是不太行,还是得将命令在容器外部执行
尝试一:在容器内部运行命令
进入容器内部docker exec -it app bash
命令:
docker exec -it mysql mysqldump -u用户名 -p密码 r_blog > /mnt/docker/mysql_backup/zzz.sql
发现可行,那具体什么原因呢?
怀疑是没有指定数据库端口号造成的,那就试试吧
docker exec -i mysql mysqldump -h81.71.87.241 -P端口号 -u用户名 -p密码 r_blog > /mnt/docker/mysql_backup/abca.sql