【问题标题】:Mariadb init without root in dockerdocker中没有root的Mariadb初始化
【发布时间】:2020-04-16 14:57:16
【问题描述】:

我尝试创建一个 mariadb 10.4.10 docker 映像。在 dockerfile 我只是将 mariadb 安装到图像中。 dockerfile 继承自我的个人自定义 alpine 图像,将在其中创建用户“appuser”。

FROM nwo/alpine:latest

LABEL MAINTAINER="dideldumm <123@abc.de>"

ARG IMAGE_NAME=nwo/mariadb
ARG IMAGE_VERSION=1.1

RUN apk update \
    && apk add mariadb \
    mariadb-client \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /var/cache/apk/*

COPY ./setup/setup.sql /home/appuser/app/setup.sql
COPY ./setup/start.sh /home/appuser/app/start.sh

RUN chown appuser:appuser /home/appuser/app/start.sh /home/appuser/app/setup.sql


RUN mkdir /home/appuser/data/db \
    && mkdir /home/appuser/data/log \
    && touch /home/appuser/app/mariadb.pid \
    && touch /home/appuser/app/mariadb.socket \
    && chown -R appuser:appuser /home/appuser/data/db \
    && chown -R appuser:appuser /home/appuser/data/log \
    && chown -R appuser:appuser /home/appuser/app/mariadb.socket \
    && chown -R appuser:appuser /home/appuser/app/mariadb.pid

USER appuser

ENTRYPOINT ["/home/appuser/app/start.sh"]

在 start.sh 脚本中,我创建了 mariadb.cnf。

echo "Create mariadb configuration file"
echo "[mysqld]" > /home/appuser/data/mariadb.cnf
echo "port=3306" >> /home/appuser/data/mariadb.cnf
echo "socket=/home/appuser/app/mariadb.socket" >> /home/appuser/data/mariadb.cnf
echo "pid-file=/home/appuser/app/mariadb.pid" >> /home/appuser/data/mariadb.cnf
echo "datadir=/home/appuser/data/db" >> /home/appuser/data/mariadb.cnf
echo "symbolic-links=0" >> /home/appuser/data/mariadb.cnf
echo "bind-address=0.0.0.0" >> /home/appuser/data/mariadb.cnf
echo "console=1" >> /home/appuser/data/mariadb.cnf
echo "general_log=0" >> /home/appuser/data/mariadb.cnf
echo "general_log_file==/home/appuser/data/log/mariadb.log" >> /home/appuser/data/mariadb.cnf
echo "log_error=/home/appuser/data/log/mariadb_error.log" >> /home/appuser/data/mariadb.cnf
echo "collation-server=$MDB_COLLATION" >> /home/appuser/data/mariadb.cnf
echo "character-set-server=$MDB_CHARACTERSET" >> /home/appuser/data/mariadb.cnf

之后我运行mysql_install_db --defaults-file=/home/appuser/data/mariadb.cnf。在控制台输出中,我收到一条消息,我只能使用系统 root 帐户访问 root 用户。但正如您在 dockerfile 中看到的那样,我切换到 appuser 并在之后运行 start.sh,这使得无法运行 sudo。我的目标是在 start.sh 中初始化 mariadb 而没有特权。

我尝试使用参数--skip-grant-tables 运行mysqld,但我无法设置root 密码。这导致ALTER USERSET PASSWORD 语句的错误消息The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement

当我之前运行“FLUSH PRIVILEGES”时,每个命令(SET PASSWORD,ALTER USER)都会导致Query OK, 0 rows affected。至少我尝试用UPDATE mysql.user SET Password=PASSWORD('test3') WHERE USER='root' AND Host='localhost'; 更新用户,结果是ERROR 1348 (HY000): Column 'Password' is not updatable

到目前为止,我完全不知道如何在没有 root 权限的情况下配置 mysql 数据库服务器。

如果你有我的解决方案,那就太好了。

问候

戴夫

【问题讨论】:

    标签: mysql docker installation mariadb root


    【解决方案1】:

    自己找到了解决方案。第一个问题是,在我的环境中,只创建了“root”,没有第二个用户。不知道为什么,但我让运行一个脚本之后会这样做,所以它对我来说并不那么重要。 要获得“旧式”10.3 root 用户行为(允许您使用非 root 用户安装 mariadb),您可以使用参数 --auth-root-authentication-method=normal 运行 mysql_install_db。 当然,之后你必须自己保护你的 mariadb 安装。

    问候戴夫

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2023-03-30
      • 2020-03-05
      • 2020-07-12
      相关资源
      最近更新 更多