将宝塔从manjaro宿主机移植到docker的centos中踩坑
前言
昨天manjiaro更新,导致pacman和curl等一系列软件都无法使用了,重装后还是害怕类似事情发生,所以考虑将我的测试环境宝塔移植到docker镜像中,但是在移植的过程中踩了很多坑。下面我把我遇到的所有坑都一一分享给大家。
踩坑
一号坑
docker中使用centos7安装宝塔后,报错dbus不存在,宝塔能启动,也勉强能用,但是当我关闭防火墙(放行防火墙端口也报错)时就尴尬了,移植报错dbus文件不存在。emmmmm,这样及时能用我宿主机也无法访问docker内部的宝塔。
$ Error: DBUS_ERROR: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
- 1
爬坑
找了很多资料,也问了很多大佬,要么说文件不存在,要么说没有使用特权启动容器,可是我明明是使用了特权的。而且文件不存在我也知道,但我不知道这个是啥,也没找到如何将这个文件安装起来的方案。几番折腾没有任何收货,最后解决方案是我想到我苹果笔记本上之前有使用docker安装过一个宝塔的容器,有放行过端口。当我打开苹果电脑时惊喜的发现那里面的docker容器依然还在。于是我就导了个tar文件到公司电脑导入。果然当我导入完成后启动容器宝塔完美的跑起来了。而且宿主机也是能访问容器中的宝塔和网页。(感觉这可能是宝塔的问题,因为我之前苹果电脑中和我卸载使用的是同样的centos7环境,之前的就可以,但是我没有比较有力的证据)
二号坑
当我将我本地备份的www目录关联到容器内部时,惊喜的发现宝塔能跑起来,但是有个问题,就是mysql死活无法启动,报错有些文件丢失,好吧那我就老老实实重装。
将mysql文件夹移除,然后安装mysql安装完成自动启动,一切都很正常。但是当我打开网页的时候问题来了,无法访问数据库。e 不是安装完成已经自动启动了吗。但是并没有,当我停止mysql服务想要重新启动mysql的时候问题来了,一直卡在
$ Shutting down MySQL.............................................................................................................................................................................................................
- 1
当我取消,然后启动mysql服务的时候,报mysql已经启动
$ mysqld_safe A mysqld process already exists
- 1
当我链接数据库的时候,提示无法链接/tmp/mysql.sock
$ mysql
$ ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
- 1
- 2
爬坑
最后看了有些tmp目录,emm ,/tmp/mysql.sock文件居然存在,想了一下 可能是我之前容器中切换www目录时并没有停止mysql导致文件遗留了吧。
最后这个文件删除,然后启动mysql,一切顺利。
三号坑
mysql是启动起来了,当我打开网站的时候报了另外一个错误,数据库名称不正确,几经波折最后发现/www/serve/data 目录下的数据库文件夹全被干掉了,还好我之前不止一个备份。
爬坑
遂从另外一个备份中将data文件夹拷贝过来。然后重启mysql再访问网站,最后还是提示数据库不存在。
爬坑2
最后抱着试一试的心态点击了一下宝塔数据库页面的“同步所有”按钮,然后再重启数据库。访问网站,至此奇迹出现。