拉取mysql镜像

  1. docker pull centos/mysql-57-centos7

创建容器

docker run -di --name=demo_name_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码

远程登录mysql

遇到的问题

(1)操作步骤

  • 启动docker
  • [x] 创建容器(镜像没有会自动去仓库下载)

    docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=hea@123 mysql:5.7
    

    (2)问题1:本地telnet端口3306不通(可以ping通服务器地址),navicat连接报:10061
    微信截图_20220506115624.png
    排查

  • [x] 防火墙是否开启

  • 如果开启
    • 服务器控制台上安全组是否放开端口
    • 服务器开放端口 ```shell

      1. 查看防火墙是否开启

      systemctl status firewalld

2. 开放端口号

firewall-cmd —zone=public —add-port=端口号/tcp —permanent

3. 更新防火墙规则(必须)

firewall-cmd —reload


- 如果没有开启,不用管
- [x] **docker自带了安全策略**

docker默认使用iptables,会进行端口转发,我的iptables服务挂了,导致端口无法从docker容器中转发出来<br />解决方案:关闭iptables<br />参考文章:<br />[https://www.cnblogs.com/nanxiang/p/14807774.html](https://www.cnblogs.com/nanxiang/p/14807774.html)<br />[https://www.cnblogs.com/yudongdong/p/10984246.html](https://www.cnblogs.com/yudongdong/p/10984246.html)
```shell
docker exec -it mysql bash
mysql -uroot -p
use mysql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
FLUSH PRIVILEGES;
select Host,User,plugin from user;

net.ipv4.ip_forward=1

firewall-cmd --state
systemctl stop firewalld
systemctl mask firewalld
yum install iptables-services
systemctl enable iptables
systemctl start iptables

iptables -t nat -N docker
iptables -t filter -N docker

service iptables stop

(3)问题2:navicat连接报:2013
微信截图_20220506115603.png
排查:DNS进行了域名解析,使得超时导致了报错、

可能和iptables关闭有关,由于时间问题,最终没有该问题自己没有解决,这里记录下可能有用的思路

解决方案:
方案一:超时时间配置长一点
方案二:在mysql容器中的my.cnf配置文件中添加:skip-name-resolve
参考文章:
https://wenku.baidu.com/view/2c3baf6ccb50ad02de80d4d8d15abe23482f0391.html