暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Dockerfile中无密码安装Mysql

Simble的小站 2018-11-21
568

问题出现

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
2
3
4
5
复制
$ debconf-show mysql-server
 mysql-server/root_password: (password omitted)
 mysql-server/root_password_again: (password omitted)
 mysql-server/error_setting_password:
 ...
复制

可以看到,有两项是必须配置的:mysql-server/root_password
mysql-server/root_password_again

预配置

  • 创建配置文件

在合适的目录下创建一个文件,例如mysql-passwd
,输入以下内容

1
2
复制
debconf mysql-server/root_password password 123456
debconf mysql-server/root_password_again password 123456
复制
  • 加载配置
1
复制
$ debconf-set-selections mysql-passwd
复制

测试结果

再次安装mysql-server,将不再需要输入密码

1
复制
$ apt-get install -y mysql-server
复制

DockerFile处理

DockerFile应当尽量避免不需要的操作,所以,获取配置项的操作可以提前在实验环境中完成。

可将获取的命令行保存为本地文件,使用时copy过去。

1
2
复制
COPY ./mysql-passwd tmp/mysql-passwd
RUN apt-get update && debconf-set-selections /tmp/mysql-passwd && apt-get install -yqq mysql-server  && rm -rf /var/lib/apt/lists/*
复制

或者是在DockerFile中直接生成,这时则可以将mysql passwd设置为参数

1
2
复制
RUN echo debconf mysql-server/root_password password 123456 > /tmp/mysql-passwd && echo debconf mysql-server/root_password_again password 123456 >> /tmp/mysql-passwd
RUN apt-get update && debconf-set-selections /tmp/mysql-passwd && apt-get install -yqq mysql-server  && rm -rf /var/lib/apt/lists/*
复制


文章转载自Simble的小站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论