AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 634277
Accepted
editor
editor
Asked: 2014-10-08 12:05:57 +0800 CST2014-10-08 12:05:57 +0800 CST 2014-10-08 12:05:57 +0800 CST

通过 docker 在 Centos 7 的前台安装、配置和运行 mariadb,无需 systemd 或服务

  • 772

在 CentOS 7 下,我知道我们正在从mysql-server实现兼容的 MariaDB 转移。我正在使用 docker 映像centos:latest,这使我受到 Centos 7 的支持。

mysqld_safe在前台运行阻塞。这很容易:我只需要 0) 安装软件包 1) 更改 root 密码 2) 从Dockerfile

在 docker 范例中,我需要能够像在 bash 脚本中一样安装 MariaDB。我已经找到了在 Ubuntu 下使用的各种方法,aptitude但还没有找到等效的答案yum:如何在 Centos 7 上安装、配置和运行 mariadb,就好像它是通过 Bash 脚本安装的一样?mysql_secure_installation似乎需要 TTY。

我尝试mysqladmin手动运行密码命令,但它抱怨它无法连接到正在运行的 MySQL 实例。因为容器在步骤之间被丢弃,我相信我需要以某种方式运行 mysql 并在同一步骤中更改密码。

我尝试安装initscriptspackage got me/bin/service但它试图将我重定向到 use systemctl start mariadb.service,这是不可用的,因为 Docker 容器得到 afakesystemd而不是systemd。有任何想法吗?

这是我当前的 Dockerfile 变体(在这个变体中,尝试tail -f将进程保持为 a 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

有关的:

  • 在 Ubuntu 上脚本安装 MySQL
  • https://askubuntu.com/questions/79257/how-do-i-install-mysql-without-a-password-prompt
  • https://stackoverflow.com/questions/1202347/how-can-i-pass-a-password-from-a-bash-script-to-aptitude-for-installing-mysql
  • https://stackoverflow.com/questions/7739645/install-mysql-on-ubuntu-without-password-prompt
centos
  • 1 1 个回答
  • 5928 Views

1 个回答

  • Voted
  1. Best Answer
    Steven
    2017-05-02T12:01:06+08:002017-05-02T12:01:06+08:00

    我正在处理类似的问题,在 Docker 容器中设置 mariadb。我发现这是在寻找运行 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 的文档。

    • 1

相关问题

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • 持续监控许多服务器运行状况的简单方法?

  • Hudson 无法在 tomcat5 中启动

  • CentOS 的依赖挑战

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve