• 【Docker】容器连接到mysql(容器互联 超详细)


    场景:

    docker容器实现连接到mysql容器,这里博主是想用nacos容器连接到mysql容器。

    前提需要:mysql容器必须有nacos数据库 (必须做好这一步先)

    方式一:通过–link互联,适用于容器网络属于docker0

    1、启动mysql容器,这里对外暴露端口为3366

    docker run -p 3366:3306 
    
    • 1

    –name mysql
    -e MYSQL_ROOT_PASSWORD=123456
    -v /myData/mysql/data:/var/lib/mysql
    -d mysql

    2、启动nacos容器,使用–link到mysql

    docker  run --name nacos8849 -p 8849:8848 
    
    • 1

    -e JVM_XMS=128m
    -e JVM_XMX=256m
    -e MODE=standalone
    -e PREFER_HOST_MODE=hostname
    -v /myData/nacos8849/logs:/home/nacos/logs
    -v /myData/nacos8849/conf/application.properties:/home/nacos/conf/application.properties
    –privileged=true
    –link mysql
    -d nacos/nacos-server:1.4.1

    3、进入到nacos容器

    docker exec -it nacos8849的容器id /bin/bash
    
    • 1

    4、尝试ping mysql,正常情况下使用mysql01容器名和容器ip都可ping通

    5、vim打开nacos的application.properties,修改数据库连接信息。切记端口是3306!

    # 注意这里的ip可以用容器名,也可以用mysql容器的ip
    # 端口是3306!!!而不是对外暴露的端口3366!!!
    db.url.0=jdbc:mysql://mysql:3306/nacos?characterEncoding=utf8
    
    • 1
    • 2
    • 3

    6、修改后重启nacos容器

    docker restart nacos8849容器id
    
    # 查看nacos的启动日志,博主运行镜像时指定了映射文件,故直接执行
    cat /myData/nacos8849/logs/start.out
    
    • 1
    • 2
    • 3
    • 4

    7、看到启动日志成功状态即完成了。

    方式二:通过自定义网络互联(推荐)

    1、首先创建自定义网络,使用bridge网桥模式

    docker network create --driver bridge 
    
    • 1

    –subject 192.168.0.0/24
    –gateway 192.168.0.1 mynet

    2、运行镜像分别创建mysql容器和nacos容器,记得使用–net指定我们刚创建的网络

    # 创建mysql容器
    docker run -p 3367:3306 
    
    • 1
    • 2

    –name mysql02
    -e MYSQL_ROOT_PASSWORD=123456
    -v /myData/mysql02/data:/var/lib/mysql
    –net mynet
    -d mysql

    #创建nacos容器
    docker  run --name nacos8850 -p 8850:8848 
    
    • 1
    • 2

    -e JVM_XMS=128m
    -e JVM_XMX=512m
    -e MODE=standalone
    -e PREFER_HOST_MODE=hostname
    -v /myData/nacos8850/logs:/home/nacos/logs
    -v /myData/nacos8850/conf/application.properties:/home/nacos/conf/application.properties
    –net mynet
    –privileged=true
    -d nacos/nacos-server:1.4.1

    3、创建完后进入nacos容器

    docker exec -it nacos8850的容器id /bin/bash
    
    # 尝试ping mysql容器
    # 此时发现在nacos容器里可以直接ping通mysql容器,通过ip和容器名称都可以
    # 但是ping不通宿主机ip,故要去实现跟宿主机的网络连通
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、虽然nacos容器里能直接ping通mysql容器,但是在nacos配置文件配置上mysql02的连接信息后重新运行nacos容器,发现运行日志报错:连接不上mysql容器

    在本机用navicat去远程连接通过自定义网络运行的mysql容器,发现也连接不上!

    5、查看原因 (这一步不用跟着敲)

    # 查看网络列表
    docker network ls
    
    • 1
    • 2

    查看bridge的网络情况

    docker network inspect 825637cadc03
    
    • 1

    我们看到Containers里没有我们刚创建的自定义网络的容器信息,才导致外界连接不上mysql容器。知道原因就好解决了!

    6、网络连通,将容器nacos8850和容器mysql02加到bridge网络。

    docker network connect bridge nacos8850
    
    docker network connect bridge mysql02
    
    • 1
    • 2
    • 3

    7、更改nacos8850的application.properties文件。

    db.url.0=jdbc:mysql://mysql02:3306/nacos?characterEncoding=utf8
    
    • 1

    8、重新运行拿nacos8850容器,发现启动成功。至此完成。

    如有不对,请大佬多多指出,小白刚学docker被这坑了好久???

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    章节十:Selenium
    YOLOv8-pose针对视频实时提取打印对应关节点序号及坐标
    ubuntu18安装coova chilli精简
    DevExpress FMX Data Grid全面编辑和定制
    说一说:ThreadLocal 、CallContext 、AsyncLocal
    别再夹灰了!这份阿里巴巴 Java 架构六大专题面试宝典值得你刷一刷
    列表总结
    第十三章---枚举类型与泛型
    problen(5)ubuntu版本问题
    RT-Thread学习笔记(四):RT-Thread Studio工具使用
  • 原文地址:https://blog.csdn.net/m0_67401270/article/details/126080557