docker容器无法访问宿主机数据库

今天用docker部署一个web服务时遇到总是连不上宿主机mysql数据库的问题,报SQLSTATE[HY000] [2002] Connection refused,经过测试,宿主机用相同配置可以连上,登入docker容器内就连不上,初步判断容器内通过localhost或127.0.0.1是连不上宿主机的。具体原因和解决方法如下:

原因:

  1. docker容器内的localhost并不是指宿主机的localhost
  2. docker在运行时就建立了虚拟网卡,并命名为docker0,在宿主机ifconfig可以看到网桥的ip是172.17.0.1(不同机器或者docker版本ip可能不同,需要查下自己的是多少)

今天用docker部署一个web服务时遇到总是连不上宿主机mysql数据库的问题,报SQLSTATE[HY000] [2002] Connection refused,经过测试,宿主机用相同配置可以连上,登入docker容器内就连不上,初步判断容器内通过localhost或127.0.0.1是连不上宿主机的。具体原因和解决方法如下:

原因:

  1. docker容器内的localhost并不是指宿主机的localhost
  2. docker在运行时就建立了虚拟网卡,并命名为docker0,在宿主机ifconfig可以看到网桥的ip是172.17.0.1(不同机器或者docker版本ip可能不同,需要查下自己的是多少)
docker容器无法访问宿主机数据库

解决方法:

  1. 在容器内通过172.17.0.1:3306访问宿主机的mysql
$ docker exec -it 8686d3dda02c /bin/sh
 $ mysql -ushowx -p --database showx -P3306 -h172.17.0.1  #可以看到连上了,只是ip没有访问授权
ERROR 1130 (HY000): Host '172.17.0.2' is not allowed to connect to this MySQL server
  1. 设置宿主机mysql允许docker0的虚拟网卡ip访问
# 宿主机mysql设置允许用户showx通过172.17.0.2访问showx数据库的任意表
$ mysql -uroot -p
 mysql>GRANT ALL PRIVILEGES ON showx.* TO 'showx'@'172.17.0.2' IDENTIFIED BY 'password' WITH GRANT OPTION; 
 mysql>flush privileges; 

# docker内测试docker0 ip链接
$ docker exec -it 8686d3dda02c /bin/sh
$ mysql -ushowx -p --database showx -P3306 -h172.17.0.1
MySQL [showx]>
  1. 修改容器web服务的db ip配置即可

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/9486

(0)
郭靖的头像郭靖
上一篇 2023年8月8日 下午5:26
下一篇 2023年8月9日 下午4:11

相关推荐

  • Centos7.6安装MySQL(超详细)

    1、查看是否已经安装Mysql rpm -qa | grep mysql 我已经安装过了 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名 如果提示warning: waiting for transaction lock on /var/lib/rpm/.rpm.lock,则需要执行 2、下载官方Mysql包 wget -i -c ht…

    2022年6月9日
    1.6K00
  • Mysql5.5中文乱码问题

    查看MySQL的字符集 发现有部分不是utf-8 一(推荐,本人实验有用) 修改MySQL配置文件,来到mysql安装目录,找到my.ini文件(可能没有此文件,没有就自己建一个,本人就是没有该文件) 若有my.ini文件 进去之后,在三个地方增加配置 第一个 第二个 第三个 若没有my.ini文件,则添加一个,内容为: 注意!!! 记得重启mysql服务 …

    2022年8月21日
    1.2K00
  • 数据库压力测试

    一、前言 在前面的压力测试过程中,主要关注的是对接口以及服务器硬件性能进行压力测试,评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说,整个系统的瓶颈在于数据库。 原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MyS…

    2023年3月21日
    96700
  • Elasticsearch Query DSL查询入门

    Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活、更精确、更易读且易调试 查询与过滤 Elasticsearch(以下简称ES)中的数据检索分为两种情况:查询和过滤。 Query查询会对检索结果进行评分,注重的点是匹配程度,例如检索“运维咖啡吧”与文档的标题有多匹配,计算的是…

    2023年5月26日
    86700
  • Sql Server2005 如何导出数据库数据

    Sql Server2005数据库数据导出两种方式 第一种,数据库数据直接备份,右键点击需要备份的库,打开任务,打开备份,然后记一下数据库备份文件位置,直接点击确定即可成功,注意修改文件路径可能会提示文件无权限 第二种方式 打开本地服务,停止Sql server服务,然后去复制需要的ldf与mdf文件

    2022年12月16日
    92200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信