最终目标是让最新的 Zabbix 版本在容器中运行,监控一堆交换机。
Zabbix 想要一些 MySQL(或 postgres),所以我想我会设置使用官方(Oracle)MySQL 8.0.19 MySQL FOSS 映像。我有一个正在运行的 MySQL 容器,但我不小心将我的 zabbix db 用户设置为只有本地连接权限。
mysql> SELECT user,host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| zabbix | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
我似乎无法更改此用户,以便它可以从组中的其他容器 zabbix-server-mysql 和 zabbix-web-apache-mysql 连接。
也许有某种方法可以启动一个新容器,以便用户 zabbix 可以通过网络使用数据库“zabbix”。
而且我对 docker 的了解还不够,不知道我是否真的需要让容器通过网络相互通信,或者是否有一些神奇的 docker 功能,它们可以在没有 IP 网络的情况下进行通信。
请指教。
最简单的方法是使用 RENAME USER 语句:
RENAME USER 'zabbix'@'localhost' TO 'zabbix'@'%';
顶部的 root % 也不好。这意味着 root 可以从网络上的任何地方远程访问数据库。您通常只想将其限制为 localhost 所以删除该用户,您应该会很好。(你需要确保你有办法通过本地机器进入 docker 容器,这样你就可以在本地访问 MySQL,否则当你删除这个用户时你可能会失去访问权限)
DROP USER 'root'@'%';
检查您的授权以确保用户 zabbix@% 有权访问数据库“zabbix”:
SHOW GRANTS FOR 'zabbix'@'%';
这将使您的 MySQL 用户正确配置。您只需要弄清楚如何配置您的 docker 容器以正确地相互通信。我不确定他们是否可以在没有专门授予他们网络访问权限的情况下进行通信。
https://dev.mysql.com/doc/refman/8.0/en/rename-user.html
https://dev.mysql.com/doc/refman/8.0/en/drop-user.html
https:// dev.mysql.com/doc/refman/8.0/en/create-user.html
https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
https://dev.mysql。 com/doc/refman/8.0/en/show-grants.html