我已经启动了标准 mysql docker 容器,现在想要创建一个用户并授予他权限。但是什么也没发生,我收到这个警告:
MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work
我对 mysql 不太熟悉 - 那么我应该在这里做什么?
更好的解决方案是使用额外的 sql 脚本启动此容器。
我应该怎么做才能使用这样的脚本启动容器:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'myuser';
GRANT ALL PRIVILEGES ON * . * TO 'myuser'@'localhost';
Run Code Online (Sandbox Code Playgroud)
这是我实际的 docker 命令:
docker run -p 3306:3306 --name mysql-server -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
有人可以帮助我吗?
Pra*_*ran 13
我也遇到了同样的情况,就我而言,我必须使用仅readonly
具有特权的用户启动我的标准 MySQL 容器SELECT
。我创建了一个 SQL 脚本并将其复制到/docker-entrypoint-initdb.d/
图像内的文件夹中。/docker-entrypoint-initdb.d/
当 MySQL 容器启动时,默认情况下会执行该目录中的所有 SQL 文件 。我已经包含了足以满足要求的工作代码片段,只需根据您的需要修改privileges.sql 文件中的 SQL 即可。此外,当您开始使用--skip-name-resolve
模式时,MySQL 不会考虑 DNS 查找值并查找默认的 IP 地址127.0.0.1
。出于通用目的,我使用了%
(任何有效的主机)
权限.sql
CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly';
GRANT SELECT ON *.* TO 'readonly'@'%';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
Dockerfile-mysql
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD root
COPY ./schemapath/privileges.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
最后,执行下面的 docker 注释来创建自定义 MySQL 映像并将其作为容器以分离模式运行。
docker build -t custom-mysql . --file ./Dockerfile-mysql
docker run -d --name custom-mysql-container -p 127.0.0.1:3306:3306 custom-mysql
Run Code Online (Sandbox Code Playgroud)
您可以使用以下步骤验证上述命令:
docker exec -it mysql-it-container /bin/bash
mysql -uroot -proot
mysql> show grants for 'readonly';
+---------------------------------------+
| Grants for readonly@% |
+---------------------------------------+
| GRANT SELECT ON *.* TO 'readonly'@'%' |
+---------------------------------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)