1、创建实例命令
docker run -id --name=c_mysql -p 3306:3306 -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.37
2、查看启动的实例 docker ps
在这里插入图片描述
3、这里映射的是宿主机的3306端口,我已经把端口开放了
在这里插入图片描述
4、在宿主机进行连接
在这里插入图片描述
#这个报错像是mysql不存在,查看mysql是否启动
在这里插入图片描述
#mysql已启动,端口也没有被占用
5、已经在容器里面测试了,mysql可以正常连接;在试试将root用户开放可以任何主机访问
5.1、进入容器,并连接mysql
docker exec -it c_mysql bash
mysql -uroot -p123456
5.2、将root用户开放所有主机可以访问
mysql> grant all privileges on . to root@‘%’; #授权
mysql> flush privileges; #刷新权限表
6、在宿主进再次进行连接测试
在这里插入图片描述
#还是不行!!!
7、去百度了一下,觉得是宿主机的路由没有开启,来试试看
#一圈回来,发现问题出在宿主机,因为如果要使用mysql命令,就是必须要/usr/bin/目录下有这个命令。但是我是docker安装mysql所以,宿主机需要安装MySQL客户端连接docker的数据库,使用远程工具navicat连接时报的错,应该是root用户没有开启,任何主机可以访问的权限。由于上面已经开了,我现在测试navicat是可以远程连接的
在这里插入图片描述
8、上面说到了一个宿主机路由的问题,我们路由没开的话就会导致宿主机于容器实例网络隔绝,所以是要打开的。
8.1、查看路由是否打开
sysctl net.ipv4.ip_forward
在这里插入图片描述
#返回值为1代表路由已开启,为0就是未开启
8.2、开启路由
echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf #将命令写入到/etc/sysctl.conf文件中
sysctl -p #加载内核
sysctl net.ipv4.ip_forward #再次查看路由是否开启

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐