在docker容器里连接上本地mysql8.0.30数据库的方法

6 篇文章 0 订阅
2 篇文章 0 订阅

目录

概述

具体步骤


概述

默认情况下,Docker会创建一个名为docker0的网桥。 Docker主机和Docker容器在该网桥上都有一个IP地址。在这个模式下,docker容器与主机的网络是不互通的,docker 及docker下的容器之间有个地址相同 (同ip段),外网访问只能通过端口映射。如果docker容器里的nginx需要连本机mysql , 那么可以将mysql的3306端口打开,通过外网去连接。

具体步骤

(1). 切换到root账号,否则保存文件时会提示文件处于只读状态。

在主机命令行里运行命令:

su root


(2). 修改mysql配置文件,修改配置为允许远程连接,并开放3306端口。

在主机命令行里运行命令:

vim  /etc/mysql/mysql.conf.d/mysqld.cnf


然后用字符#注释掉如下两行代码:

bind-address        = 127.0.0.1
mysqlx-bind-address    = 127.0.0.1


(3). 重启mysql服务。

在主机命令行里运行命令:

service mysql stop
service mysql start


(4). 检查3306端口是否开启成功。
在主机命令行里运行命令:

netstat -an|grep 3306


如果出现:::3306,而不是127.0.0.1:::3306,那么就表示3306端口已开启成功。

运行结果示例图:

 
(5). 查看docker容器连接主机的ip地址。
在主机命令行里运行命令:

ifconfig

在结果列表中找到docker0这一项对应的inet值。

运行结果示例图:

也可以在主机命令行里运行命令:

ip addr show docker0

来找到对应的inet值。

运行结果示例图:

 
(6). 修改对应程序.env文件里的mysql配置项,其中hostname这一项填写前面步骤里找到的docker0网桥的inet值【例如172.17.0.1】,并对应着修改mysql配置项里的数据库名称、用户名、密码为自己本地mysql软件里对应数据库的名称、用户名、密码。


(7). 重启容器并检查容器状态是否为正在运行中(running)。

在项目容器目录下运行命令:
 

# 重启容器
docker-compose restart

# 查看容器列表
docker-compose ps 

容器列表中status这一列的值为running就表示容器状态为正在运行中,即刚才重启容器的操作已成功执行完毕。

(8). 运行项目程序并访问项目地址,检查项目程序是否可以正常运行、使用的数据来源是否是本地mysql数据库里的数据等。

(9). 运行完前面的(8)步骤后,如果运行程序报如下的错误:
[PDOException]                             
  SQLSTATE[HY000] [2002] Connection refused

那么很可能是因为账号权限方面的问题。一种可以尝试的解决办法如下:

运行mysql -u root -p后输入密码,进入mysql控制台,完成如下I、II、III、IV步骤。
I.创建账户。
  

create user '用户名A'@'docker0网桥的inet值【例如172.17.0.1】' identified by '用户名A对应的密码';

II.赋予权限。
    

grant all privileges on *.* ro '用户名A'@'docker0网桥的inet值【例如172.17.0.1】';

        如果是修改权限,那么还需要在上面这条命令末尾分号前加上with grant option。
III.刷新权限。
    

flush privileges;

IV. 重启mysql服务。
  

service mysql stop
service mysql start

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值