文章目录
- 🗽先来说我的是什么情况
- 🪁问题描述
- 🪁解决方法:
- ✔️1 重启iptables
- ✔️2 重启docker
- 🪁其他有可能连不上的原因
- ✔️1 客户端不支持caching_sha2_password的加密方式
- ✔️2 my.conf 配置只有本机可以访问
🗽先来说我的是什么情况
这是我的启动命令,发现没有我这里是没有指定端口的
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
这段命令的来源是docker 镜像仓库官网
🪁问题描述
- 使用
docker ps
查看 发现端口有没有什么不一样没 正常的都有 0.0.0.0:端口 我的这个没有
- 于是我把这个容器删除了
docker rm -f 容器Id
,重新创建了一个docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
- 我寻思这下应该没有问题了吧,结果…
启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport
错误
错误原因:
在防火墙中默认 nat 是 REJECT的,所以端口映射被拒绝。
🪁解决方法:
✔️1 重启iptables
vim /etc/sysconfig/iptables
##注释掉下面这一行,这行的意思是拒绝掉所有的FORWARD,拒绝的提示信息是icmp-host-prohibited(禁止)
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#重启iptables
systemctl restart iptables.service
✔️2 重启docker
我自己是用这个方式解决的,我自己对防火墙这块不是很了解,就不过多的分析了
systemctl restart docker
可以看到重启之后再去执行启动命令就可以了
🪁其他有可能连不上的原因
✔️1 客户端不支持caching_sha2_password的加密方式
# 进入mysql容器内容
docker exec -it mysql bash
# 进入输入下面命令 ,然后输入密码
mysql -u root -p
# 查看用户列表
select host,user,plugin,authentication_string from mysql.user;
# 修改 mysql_native_password 加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 重启一下容器即可
docker restart mysql
✔️2 my.conf 配置只有本机可以访问
# 进入mysql容器内容
docker exec -it mysql bash
cd /etc/mysql/
cat my.cnf
# 改成这个 或者注释掉
bind-address=0.0.0.0
# 重启一下容器即可
docker restart mysql