解决Docker容器内访问宿主机MySQL数据库服务器的问题

懒得描述太多,总归是解决了问题,方法简要记录如下,虽然简要,但是完整,一来纪念处理该问题耗费的大半天时间,二来本着共享精神帮助其他遇到该问题的哥们儿,当然这个方法并不一定能解决你们的问题,但是多少能提供些解决思路.

第一,先检查防火墙,通常应该没什么问题

(问题解决之后我把这块规则去掉了,发现没什么影响,所以容器的话,可能docker已经解决了防火墙的问题,但是不排除其他人会有这个问题.)
添加规则

针对特定地址开放3306端口,一定程度上保证数据库的安全
iptables -I INPUT -s 172.17.0.2 -p tcp --dport 3306 -j ACCEPT
展示当前规则
iptables-save
将规则输出至文件
iptables-save > iptables.rules.backup
将文件内规则导出至当前防火墙,规则生效
iptables-restore < iptables.rules.backup

第二,修改MySQL配置文件,将绑定的配置注释掉,然后添加数据库user表中root用户Host记录,使该用户可以在该IP地址远程连接数据库
引起的问题:
Can’t connect to MySQL server on (111 “Connection refused”)
解决:

找到自己MySQL数据库配置文件的位置,编辑
/etc/mysql/mysql.conf.d# vi mysqld.cnf
将 bind 127.0.0.1 注释掉

开放远程连接后,会出现第二个问题:
"Host ‘172.17.0.2‘ is not allowed to connect to this MySQL server"

解决办法:
root 进入数据库,执行下方两行命令:
grant all privileges on *.* to ‘root‘@‘172.17.0.2‘ identified by ‘pswd‘ with grant option;
开放所有权限给root,当root以pswd(不一定是root登录密码,仅作为情景下登录的密码)密码从 172.17.0.2 登入的时候,允许其操作所有数据库下的所有表(也可以将 *.* 改成特定数据库下的特定表,这个随意).

flush privileges;
刷新

重启数据库
/etc/init.d/mysql stop
/etc/init.d/mysql start

再从docker访问数据库的时候就可以了
[email protected]:~/backends# telnet 172.17.0.1 3306
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is ‘^]‘.

这样的结果就是,仅开放一个IP地址的权限

注意,网上有许多好心的哥们儿也提供了修改的命令,grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘pswd‘ with grant option;

就是把IP地址改成了%,这样的结果就是当root从任意机器远程连接的时候只要密码正确,都会接受,一劳永逸,不过这样多少优点安全隐患,自己把握吧.

原文地址:https://www.cnblogs.com/gaidy/p/11344942.html

时间: 2024-08-06 21:39:49

解决Docker容器内访问宿主机MySQL数据库服务器的问题的相关文章

centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied

docker运行一个容器后,将主机中当前目录下的文件夹挂载到容器的文件夹后 进入到docker容器内对应的挂载目录中,运行命令ls后提示: ls: cannot open directory .: Permission denied 解决: 在docker run一个容器时,加上 --privileged=true 给容器加特权即可. 原文地址:https://www.cnblogs.com/UniqueColor/p/9318815.html

docker容器访问宿主机IP

问题: 一部分服务打包进docker 用docker-compose启动,但是一部分正在开发中,放在host比较方便,比如node.js这种,希望在调试已经封进docker容器的时候,能设置从容器网络访问宿主机node服务 参考https://www.jb51.net/article/149173.htm docker 安装的时候,会在宿主机建立一块虚拟网卡docker0, 宿主机 通过这个网卡 桥接到了docker内局域网. 在docker容器内,通过宿主机在局域网内的IP地址就能访问宿主机的

阿里云专有云平台docker容器内应用故障总结

阿里云专有云平台docker容器内应用检测失败故障总结 各位网友,各位同行,大家好! 今天在阿里云专有云平台中,遇到了一些关于docker容器内应用检测失败的问题,现把今天的解 觉问题的心得和解决思路,分享给大家: 问题描述:在docker容器中rhs服务应用显示检测失败:(这里我只说一个例子就好了,然后解 决的方法和思路说一下: 解决方案和思路:1.首先先查看一下检测失败的报警系统: 2.进入服务器的后端,使用ps -ef 检查服务的进程,是否已经存在,如果不存在, 希,可以将其服务的应用程序

docker容器内应用检测失败总结

docker容器内应用检测失败故障总结 各位网友,各位同行大家: 今天在云平台中遇到了一个这样一个问题,在云平台上面docker容器中的应用,在监控客户端 中,显示应用检测失败的问题:以下是经常遇到的几个应用检测失败的常见解决办法如下所示: 问题描述:rds产品  docker容器中的应用检测失败:(备注:宿主机运行正常) 解决思路:1.一般情况下如果应用服务检测失败的话,首先查看一下这个应用的进程是否还在 可以使用命令ps -ef | grep +服务名称:查看一下服务的运行状态.查看一下服务

Docker容器内不能联网的6种解决方案

Docker容器内不能联网的6种解决方案 注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.8.8.8) 1.使用--net:host选项 sudo docker run --net:host --name ubuntu_bash -i -t ubuntu:latest /bin/bash 2.使用--dns选项 sudo docker run --dns 8.8.8.8 --dns 8.8.4.4 --name ubu

解决docker容器的窗口大小问题

解决docker容器的窗口大小问题 最近哥们在是使用docker时,发现有些容器内部窗口大小有问题. 如下午所示,vi窗口只占据左上角一部分.正常情况下vi应该铺满整个窗口才对呀. 所以哥们找到了解决方案,执行下面命令,然后退出容器重新进入. echo "export TERM=xterm" >> /root/.bashrc 参考文献 GitHub 原文地址:https://www.cnblogs.com/WingPig/p/8124353.html

解决docker容器中Centos7系统的中文乱码

解决docker容器中Centos7系统的中文乱码问题有如下两种方案: 第一种只能临时解决中文乱码: 在命令行中执行如下命令: $>localedef -i zh_CN -f UTF-8 zh_CN.UTF-8 $>yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common $>localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 $>export LC_ALL=zh

虚拟主机MySQL数据库备份

对MySQL数据库虚拟主机操作熟练的朋友都知道,MYSQL备份PHP脚本程序只适合没有MySQL Shell权限的虚拟主机用户,如果遇到有MySQL Shell权限的虚拟主机用户该如何备份与还原呢?今天小编为大家解读虚拟主机MySQL数据库更为通用的备份与还原方法. 1.关于备份: 我们在使用MySQL中一般都用MyISAM类型的表,这种表是以文件形式保存的文件系统中的;而HEAP类型的表是保存在内存中的,下面的方法是针对MyISAM表的. 1.1.直接拷贝数据库文件.首先不推荐使用这种方法,因

Cacti监控mysql数据库服务器实现过程

Cacti监控mysql数据库服务器实现过程 2014-05-29      0个评论    来源:Cacti监控mysql数据库服务器实现过程   收藏    我要投稿 1 先在cacti服务器端安装mysql模板 wget https://mysql-cacti-templates.googlecode.com/files/better-cacti-templates-1.1.8.tar.gz tar –xvf better-cacti-templates-1.1.8.tar.gz cd b