拉取mysql镜像
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

排查[x] 防火墙是否开启
- 如果开启
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
排查:DNS进行了域名解析,使得超时导致了报错、
可能和iptables关闭有关,由于时间问题,最终没有该问题自己没有解决,这里记录下可能有用的思路
解决方案:
方案一:超时时间配置长一点
方案二:在mysql容器中的my.cnf配置文件中添加:skip-name-resolve
参考文章:
https://wenku.baidu.com/view/2c3baf6ccb50ad02de80d4d8d15abe23482f0391.html
