在CentOS 7下,我明白我们正在从mysql-server迁移到实现兼容的MariaDB。 我使用的是一个docker的centos:latest ,它使我处于Centos 7的主持下。
mysqld_safe在前台运行阻塞。 这使得它很容易:我只需要0)安装包1)更改根密码和2)从一个Dockerfile内运行服务器
在docker范例中,我需要能够像安装bash脚本一样安装MariaDB。 我已经find了各种方法来使用aptitude在Ubuntu下做到这一点,但还没有find一个相当于yum下的答案:我如何安装,configuration和运行在Centos 7 mariadb,就好像它正在通过Bash脚本安装? mysql_secure_installation似乎需要一个TTY。
我已经尝试手动运行mysqladmin密码命令,但它抱怨说无法连接到正在运行的MySQL实例。 因为容器被扔掉之间的步骤,我相信我需要以某种方式运行MySQL并在同一步骤更改密码。
我试过安装initscripts软件包得到我/bin/service但它试图redirect我使用systemctl start mariadb.service ,这是不可用的,因为docker集装箱得到一个fakesystemd而不是systemd 。 有任何想法吗?
这是我目前的Dockerfile变种(在这个变种中,尝试使用tail -f来保持进程作为一个CMD )
FROM centos:latest MAINTAINER Me ([email protected]) RUN yum -y install wget epel-release RUN cd /usr/local/src && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm -Uvh remi-*.rpm && rm remi-*.rpm RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi*.repo RUN cd /usr/local/src && wget http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm && rpm -Uvh rpmforge-*.rpm && rm rpmforge-*.rpm RUN rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/rpmforge*.repo RUN yum -y update RUN yum -y upgrade # mysql RUN yum -y install mariadb-server RUN yum -y install initscripts WORKDIR /usr #RUN echo "bind-address=0.0.0.0" >> /etc/my.cnf RUN /usr/bin/mysql_install_db --datadir="/var/lib/mysql" --user=mysql RUN /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --user=mysql >/dev/null 2>&1 & RUN /usr/bin/mysqladmin -u root password SOMEPASSWORD CMD tail -f /var/log/mariadb/mariadb.log EXPOSE 3306
有关:
我正在处理类似的问题,在Docker容器中设置mariadb。 我发现这find了运行mysql_secure_install的方法。 可以将input提供给脚本,也可以只运行脚本运行的命令。 我select了后者。
我也遇到了同样的问题,没有find正在运行的MySQL实例的命令。 问题是,你的构build的每一步都在一个单独的容器中运行,所以你将不得不为每个命令启动mysql,或者一步运行它们。 这是我在我的Dockerfile中:
ARG DATABASE_ROOT_PASS RUN service mysql start \ && mysqladmin -u root password "$DATABASE_ROOT_PASS" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_ROOT_PASS') WHERE User='root'" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User=''" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "FLUSH PRIVILEGES"
你可以用它来构build它
docker build . --build-arg DATABASE_ROOT_PASS='changeme123'
你可以在这里find–build-arg的文档。