MySQL Docker容器 - 授予用户权限 - 警告

7
我已经启动了标准的mysql docker容器,现在想要创建一个用户并授予权限给他。 但是没有任何反应,我收到了这个警告:
MySQL以--skip-name-resolve模式启动;您必须重新启动它而不使用此开关才能使此授权起作用

我对mysql不是很熟悉 - 那么我该怎么做呢?

一个更好的解决方案是使用附加的SQL脚本启动此容器。
我该如何使用这样的脚本启动容器?
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'myuser';
GRANT ALL PRIVILEGES ON * . * TO 'myuser'@'localhost';

这是我实际使用的Docker命令:
docker run -p 3306:3306 --name mysql-server -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

有人能帮我吗?


1
--skip-name-resolve 表示 MySQL 不会执行 DNS 查找。因此,localhost 在这里不起作用。您可以尝试使用 127.0.0.1 - Fabricator
谢谢 - 现在可以了! :) - m1well
1个回答

12
我也遇到了类似的情况,在我的情况下,我必须使用只有SELECT权限的readonly用户启动标准MySQL容器。我创建了一个SQL脚本并将其复制到镜像内部的文件夹/docker-entrypoint-initdb.d/中。当MySQL容器启动时,默认情况下会执行/docker-entrypoint-initdb.d/目录中的所有SQL文件。我已经包含了适用于此要求的工作代码片段,只需根据需要修改privileges.sql文件中的SQL即可。另外,由于您已经以--skip-name-resolve模式启动,因此MySQL不考虑DNS查找值并查找默认为127.0.0.1的IP地址。出于通用目的,我使用了%(任何有效主机)。
CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly';
GRANT SELECT ON *.* TO 'readonly'@'%';
FLUSH PRIVILEGES;

Dockerfile-mysql

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD root
COPY ./schemapath/privileges.sql /docker-entrypoint-initdb.d/

最后,执行以下 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

您可以使用以下步骤验证上述命令:
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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接