根治dockerfile构建镜像时mysql服务报错问题--(Ubuntu内核快速升级)

1.

Linux version 4.4.0-137-generic (buildd@lgw01-amd64-037) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018

在上述ubuntu上使用Dockerfile构建镜像时,拉取ubuntu16.04镜像,并在其上安装mysql服务,执行 RUN service mysql start时失败。

网上一般的解决方法是添加以下代码:

RUN usermod -d /var/lib/mysql/ mysql
RUN ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
RUN chown -R mysql:mysql /var/lib/mysql

但此次情况不适用,无法解决。甚至直接导入在其他环境构建成功的镜像包导入也不行,mysql服务还是会挂掉。

(有少部分情况是镜像能构建成功,但运行的时候mysql服还是务起不来。这种情况可以使用手动执行命令的方式将其启动。不过治标不治本)

	docker exec -ti xxx chown -R mysql:mysql /var/lib/mysql
	docker exec -ti xxx service mysql start

接下来我们会讲到如何根治这个问题。

 

2.在其他内核版本下进行构建测试,发现能正常构建,无报错。

Linux version 4.15.0-29-generic (buildd@lgw01-amd64-057) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018

 

3.

由于docker会共享宿主机的内核,由此可知是宿主机的内核版本导致dockerfile构建镜像时的差异。

可以尝试使用docker-compose的方式去规避mysql启动错误这个问题,当然升级内核是根本的解决方式。

快速更新内核:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

会列出可供更新的版本,我选择最新的 5.4.13

升级后重新build Dockerfile 构建镜像,错误消除。

欢迎留言探讨。

 

引用:https://blog.csdn.net/qq_18683985/article/details/79961378


版权声明:本文为q851579181q原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。