• docker容器访问宿主机mysql数据库


    今天用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可能不同,需要查下自己的是多少)

    image

    解决方法:

    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配置即可
  • 相关阅读:
    Java堆和优先队列
    JAVA取数两个数组交集,考虑重复和不重复元素
    Java策略模式
    Java设计模式迭代器
    Java 模板模式
    java图片缩放与裁剪
    Java桥接模式
    Java集合实现
    Java Mybatis实现主从同步
    Java组合模式
  • 原文地址:https://www.cnblogs.com/aze999/p/16160485.html
Copyright © 2020-2023  润新知