如何在Docker MySQL镜像上允许外部连接

nkoocmlb  于 2023-06-04  发布在  Mysql
关注(0)|答案(2)|浏览(214)

我正在尝试获取我创建的Docker MySQL镜像的root访问权限。我为ROOT_PASSWORD和DATABASE放置了环境变量,这样我就可以确保密码确实存在,并且可以使用命令行访问root。问题在于尝试使用MySQLWorkbench或SequelPro访问根目录。我将主机名设置为localhost,用户设置为root,端口设置为3307(在运行创建数据库的命令时,我已经Map了这个端口)。当我尝试连接时,我得到一个错误
“用户'root'连接到位于localhost:3307的MySQL服务器的尝试失败:不允许主机连接到此MySQL服务器”
我试过将端口号更改为3306,将IP更改为127.0.0.1,但错误并没有消失。我查看了GitHub的一篇文章,建议root用户使用“%”作为主机,这可以通过改变我的绑定地址来实现。问题是我找不到mysql.cnf配置文件...我甚至不认为有一个存在于我的系统
https://i.imgur.com/eeNdg4J.png

wvyml7n5

wvyml7n51#

允许外部连接到基于docker的mysql的最简单方法是传递一个变量,如下所示:

docker run --name=name -p 3306:3306 -v your-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_ROOT_HOST:"%" -d mysql

使用MYSQL_ROOT_HOST:"%"允许从任何IP进行远程连接。对于已定义的IP,将%替换为外部IP地址。
更多信息https://devopsbuild.com/docker-host-is-not-allowed-to-connect-to-this-mysql-server/

jchrr9hc

jchrr9hc2#

获得访问权限的可靠方法是:

docker inspect mysql_container_name

找到IP地址。
然后你可以使用类似于:

mysql -u root -p -h <docker container ip address>

还有几个注意事项:

  • 默认的mysql端口是3306,所以你也应该仔细检查你没有不小心把它反向Map。
  • 环境变量名为MYSQL_ROOT_PASSWORD而不是ROOT_PASSWORD
  • 您可能需要提供一个在网络接口而不是套接字上绑定和侦听的配置
  • 配置文件位于docker容器中。您可以将卷Map为使用本地文件:

docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
查看更多信息:https://docs.docker.com/samples/library/mysql/

相关问题