我已经启动了标准的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';
这是我实际的码头命令:
docker run -p 3306:3306 --name mysql-server -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
有人可以帮我吗?
非常感谢。
答案 0 :(得分:0)
我也遇到了同样的情况,在这种情况下,我必须以仅具有readonly
特权的SELECT
用户启动我的标准MySQL容器。我创建了一个SQL脚本并将其复制到图像内的文件夹/docker-entrypoint-initdb.d/
中。 MySQL容器启动时,默认情况下将执行目录/docker-entrypoint-initdb.d/
中的所有SQL文件。我已经包含了满足要求的工作代码段,只需根据需要在privacys.sql文件中修改SQL。此外,由于您从--skip-name-resolve
模式开始,MySQL不会考虑DNS查找值,也不会寻找默认127.0.0.1
的IP地址。出于一般目的,我使用了%
(任何有效主机)
privileges.sql
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)