docker使用小记4-docker自定义mysql镜像问题记录
上次生成tomcat镜像成功之后,需要再生成一个mysql容器,一般来说hub上面有mysql的官方镜像,直接拉下来用就可以了,但是我们公司有自己的rpm包,所以还是需要自己自定义一个mysql镜像。
但是这次用dockerfile生成镜像之后运行的容器确存在问题,按照rpm包里面的内容,容器启动后mysql服务应该也会启动,可当我进入容器之后发现并没有。
进入容器并尝试登陆mysql,发现无法登录
查看mysql进程是否存在:
发现mysql并没有启动,尝试启动mysql
这里提示已经很明显了,让我不要用root用户去启动mysql,可是我在rpm包安装的时候已经设置了启动用户为mysql,不应该会出现这种问题。而且之前这个包在服务器或虚拟机上安装都不会出现这种问题,至此问题卡住。
因为在rpm包有将mysql配置成服务,所以我尝试用system start mysql去启动,结果报了如下的错:
通过百度发现这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。这样就可以使用systemctl了。
如果要是用systemctl 管理服务就要加上参数 --privileged 来增加权,并且不能使用默认的bash,换成 init
我按着上面的方法重新运行了一个容器:
1 docker run -itd -p 3307:3306 --name mysql --privileged mysql /usr/sbin/init
进入容器:
1 docker exec -it mysql bash
尝试进入mysql
成功,说明mysql服务已自动启动。
后面我查了不少资料,很多都说这是centos7镜像的bug,但是7.2已经解决了。可是我引用的是7.6的版本,照理说不应该会出现这个问题,不过问题已经解决,这个原因就等以后有时间再探究。
现在来简化下运行容器的命令,每次运行容器都要输入/usr/sbin/init参数也挺麻烦的,我们可以把它写到dockerfile中
1 ENTRYPOINT ["/usr/sbin/init"]
至于--privileged好像没法写入dockerfile中,还是乖乖的在run里面加上吧。
参考资料:https://www.cnblogs.com/as007012/p/10042387.html
https://blog.csdn.net/weixin_42123737/article/details/87984996