通过配置iptables.service实现docker的mysql的远程访问

docker的虚拟化技术

我们在利用容器的虚拟化技术可以在虚拟机上面配置多个容器来隔离运行我们的程序(进程),其本质上就是一个小型的虚拟机,可以通过一下命令进入:

docker exec -it 服务名 /bin/bash

创建、访问、重启docker的mysql如下:

  1. 获取mysql镜像:
docker pull mysql:5.7(版本可选)
  1. 查看下载的镜像
docker images
  1. 创建mysql实例(先在/mydata下创建mysql文件夹)
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
  1. 查看创建的docker实例
docker ps
  1. 利用sqlyog或者navicat远程访问该服务,但可能会出现无法访问的情况,可以利用window的shell的Talent来访问该端口(默认没有开启该服务,可以在控制面板的程序和功能打开),看看是否能发现还是连发现都不行,前者是用户密码的问题,后者是防火墙没开启这个端口。
talent IP port(如 talent 192.168.56.10 3306)
  1. 若是后者我们需要开启防火墙端口,在centos7下面输入以下可以看到防火墙的一些信息:
service iptables status
  1. 可能会出现找不到iptables.service的现象,这是centos7使用了firewalld来管理防火墙,我们可以用回传统的管理方式iptables.service
Redirecting to /bin/systemctl status iptables.service
Unit iptables.service could not be found.
  1. 打开/etc/sysconfig查看以下的服务,没有发现iptables.service,用yum来获取该服务:
yum install iptables-services
  1. 配置开机自启动
systemctl enable iptables
  1. 开启传统的iptables防火墙服务
systemctl start iptables
  1. 重新查看iptables防火墙服务
service iptables status
  1. 拥有了iptables服务后,我们就可以配置开通防火墙端口3306了,打开vim /etc/sysconfig/iptables,仿造内部的文本给3306开通端口。


    3306端口

    重新启动防火墙服务

service iptables restart
  1. 重新启动防火墙可能导致docker端口链路异常,iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destinatio,需要重新启动。
systemctl restart docker
  1. 如果还不行那就可能是mysql的账号不允许远程调用服务,其实可以在本机模拟远程调用
mysql -u root -proot -h IP -P port (IP和port填具体)

那就本地登录上去配置root用户的远程调用权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

WITH GRANT OPTION为可选项,证明该用户还可以给别的用户授权。

flush privileges;

更新一下配置。

你可能感兴趣的:(通过配置iptables.service实现docker的mysql的远程访问)