簡體   English   中英

docker中沒有root的Mariadb init

[英]Mariadb init without root in docker

我嘗試創建一個 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 密碼。 這導致錯誤消息The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statementALTER 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';更新用戶UPDATE mysql.user SET Password=PASSWORD('test3') WHERE USER='root' AND Host='localhost'; 這導致ERROR 1348 (HY000): Column 'Password' is not updatable

到目前為止,我完全不知道如何在沒有 root 權限的情況下配置 mysql 數據庫服務器。

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

問候

戴夫

我自己找到了解決方案。 第一個問題是,在我的環境中,只創建了“root”,沒有第二個用戶。 不知道為什么,但我讓之后運行一個腳本來做到這一點,所以這對我來說並不重要。 要獲得“舊式”10.3 root 用戶行為(它使您可以使用非 root 用戶安裝 mariadb),您可以使用參數--auth-root-authentication-method=normal運行mysql_install_db 當然,之后您必須自己保護您的 mariadb 安裝。

問候戴夫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM