Docker部署mysql并设置外部(宿主机)访问

问题:

宿主机和虚拟机互相可以ping通,但在Docker中启动mysql容器后,宿主机无法通过虚拟机ip和端口号连接虚拟机数据库

初始环境:

ubuntu系统

mysql容器端口号3306

解决:

1.设置mysql外部可访问

mysql默认只能本机访问,需要将其设置为外部可访问。

首先进入mysql容器

#进入mysql容器
docker exec -it mysql mysql -u用户名 -p密码

#切换数据库
use mysql

#显示当前用户
select user,host from mysql.user;

#创建一个用户和密码 设置访问权限为%
create user '用户名'@'%' identified with caching_sha2_password by '密码';

#设置允许访问的数据库 这里是全部
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' WITH GRANT OPTION;

# 刷新
FLUSH PRIVILEGES;

退出后重新启动mysql容器。

注意一个是caching_sha2_password是mysql新版本的插件,对应老版本的mysql_native_password,可以通过show plugins查看mysql的插件及其状态。如果插件错误可以看看是不是没启动。

设置完成后,mysql就具有外部访问的权限了,下面设置虚拟机网络配置。

 2. 我的VM虚拟机的网络设置默认为仅主机和NAT模式,需将网络设置为桥接模式。

3. 查看虚拟机和宿主机的IP

虚拟机可以用ifconfig命令查看,其中ens网卡对应的是虚拟机ip

宿主机可以用命令行ipconfig查看,也可以在设置-网络中查看ipv4地址

此时可以先尝试看能否相互ping通。

如果ping不通,关闭防火墙。window关闭系统防火墙,Ubuntu系统关闭ufw防火墙。

4.宿主机连接

我用的是DBeaver,也可以用其他数据库管理工具。输入虚拟机ip、mysql容器映射的端口号以及之前创建那个有外部访问权限的用户名、密码。然后就可以测试连接是否成功。

我这里是报了一个错误,需要在驱动属性里将这一选项设为true。

然后就大功告成了!

题外话一句,环境配置果然是一项需要耐心的工作,细致和心态很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值