首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docker中没有root的Mariadb init

问在docker中没有root的Mariadb init
EN

Stack Overflow用户
提问于 2019-12-26 18:37:38
回答 1查看 929关注 0票数 0

我尝试创建一个mariadb 10.4.10 docker镜像。在dockerfile中,我只需将mariadb安装到镜像中。dockerfile继承自我个人的自定义高山图像,将在其中创建用户"appuser“。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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,但之后无法设置超级用户密码。这将导致ALTER USER和SET PASSWORD语句的错误消息The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement。

当我之前运行“刷新权限”时,每个命令(设置密码,更改用户)都会导致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数据库服务器。

如果你能给我一个解决方案,那就太好了。

问候

戴夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-26 20:11:47

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

向Dave致敬

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59487182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档