Насколько я понимаю, под CentOS 7 мы переходим с mysql-server
к совместимой с реализацией MariaDB. Я использую образ докера centos:latest
, в результате чего я оказался под покровительством Centos 7.
mysqld_safe
запускает блокировку на переднем плане. Это упрощает: мне просто нужно: 0) установить пакет, 1) изменить пароль root и 2) запустить сервер изнутри Dockerfile
В парадигме докеров мне нужно иметь возможность установить MariaDB, как если бы это было в сценарии bash. Я нашел разные способы сделать это, используя aptitude
под Ubuntu, но еще не нашли эквивалентного ответа под yum
: Как установить, настроить и запустить mariadb на Centos 7, как если бы он устанавливался через сценарий Bash? mysql_secure_installation
кажется, требуется телетайп.
Я пробовал запустить mysqladmin
password вручную, но жалуется, что не может подключиться к работающему экземпляру MySQL. Поскольку контейнеры выбрасываются между шагами, я считаю, что мне нужно как-то запустить mysql и изменить пароль на том же шаге.
Я пробовал установить initscripts
пакет получает меня /bin/service
но он пытается перенаправить меня на использование systemctl start mariadb.service
, который нельзя использовать, потому что контейнеры Docker получают fakesystemd
и нет systemd
. Любые идеи?
Вот мой текущий вариант Dockerfile (в этом случае tail -f
чтобы поддерживать процесс как CMD
)
FROM centos:latest
MAINTAINER Me (some@guy.com)
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
Связанный:
Я работаю над аналогичной проблемой, настраивая mariadb в контейнере Docker. я нашел этот ищу способы запустить mysql_secure_install. Есть способы передать ввод в скрипт, или вы можете просто запустить команды, которые скрипт будет запускать. Я выбрал последнее.
Я также столкнулся с той же проблемой, когда команды не находили работающий экземпляр MySQL. Проблема в том, что каждый шаг вашей сборки выполняется в отдельном контейнере, поэтому вам придется запускать 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"
Затем вы можете построить его с помощью
docker build . --build-arg DATABASE_ROOT_PASS='changeme123'
Вы можете найти документацию для --build-arg Вот.