问题出现
Linux在第一次安装有些软件时会有交互的输入的需求,比如mysql在首次安装时需要设置root的密码。这在正常配置过程中没什么问题,但在使用DockerFile创建docker镜像时,则遇到了麻烦。
解决思路
如果将安装好的mysql-server使用apt remove从系统中卸载后,再次重新安装,则不再需要输入密码。另外当安装完一些软件后,可以使用dpkg-config来重新配置。
这样,就可以在安装软件前先对系统做好相关配置。接下来,就是需要获取软件的必要配置项
获取软件必要配置项
下载软件包
可以通过网上搜索方式下载相关的deb包,但众所周知,Linux的软件包版本多,很多情况下并不知道需要安装哪个版本。但可以使用apt来下载相应的软件包
1 | $ apt-get -d install -y mysql-server |
使用apt-get的-d参数,将只会下载,不进行安装。下载完毕后,软件包位于/var/cache/apt/archives
目录下。
获取配置项
进入软件包的存放目录,然后执行
1 | dpkg-preconfigure mysql-server-5.1_5.1.49-3_amd64.deb |
使用debconfig-show
来查看相应的配置项
1 | $ debconf-show mysql-server |
可以看到,有两项是必须配置的:mysql-server/root_password
和mysql-server/root_password_again
预配置
- 创建配置文件
在合适的目录下创建一个文件,例如mysql-passwd
,输入以下内容
1 | debconf mysql-server/root_password password 123456 |
- 加载配置
1 | $ debconf-set-selections mysql-passwd |
测试结果
再次安装mysql-server,将不再需要输入密码
1 | $ apt-get install -y mysql-server |
DockerFile处理
DockerFile应当尽量避免不需要的操作,所以,获取配置项的操作可以提前在实验环境中完成。
可将获取的命令行保存为本地文件,使用时copy过去。
1 | COPY ./mysql-passwd /tmp/mysql-passwd |
或者是在DockerFile中直接生成,这时则可以将mysql passwd设置为参数
1 | RUN echo debconf mysql-server/root_password password 123456 > /tmp/mysql-passwd && echo debconf mysql-server/root_password_again password 123456 >> /tmp/mysql-passwd |