docker容器实现连接到mysql容器,这里博主是想用nacos容器连接到mysql容器。
前提需要:mysql容器必须有nacos数据库 (必须做好这一步先)
1、启动mysql容器,这里对外暴露端口为3366
docker run -p 3366:3306
–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
-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
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
6、修改后重启nacos容器
docker restart nacos8849容器id
# 查看nacos的启动日志,博主运行镜像时指定了映射文件,故直接执行
cat /myData/nacos8849/logs/start.out
7、看到启动日志成功状态即完成了。
1、首先创建自定义网络,使用bridge网桥模式
docker network create --driver bridge
–subject 192.168.0.0/24
–gateway 192.168.0.1 mynet
2、运行镜像分别创建mysql容器和nacos容器,记得使用–net指定我们刚创建的网络
# 创建mysql容器
docker run -p 3367:3306
–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
-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,故要去实现跟宿主机的网络连通
4、虽然nacos容器里能直接ping通mysql容器,但是在nacos配置文件配置上mysql02的连接信息后重新运行nacos容器,发现运行日志报错:连接不上mysql容器
在本机用navicat去远程连接通过自定义网络运行的mysql容器,发现也连接不上!
5、查看原因 (这一步不用跟着敲)
# 查看网络列表
docker network ls
查看bridge的网络情况
docker network inspect 825637cadc03
我们看到Containers里没有我们刚创建的自定义网络的容器信息,才导致外界连接不上mysql容器。知道原因就好解决了!
6、网络连通,将容器nacos8850和容器mysql02加到bridge网络。
docker network connect bridge nacos8850
docker network connect bridge mysql02
7、更改nacos8850的application.properties文件。
db.url.0=jdbc:mysql://mysql02:3306/nacos?characterEncoding=utf8
8、重新运行拿nacos8850容器,发现启动成功。至此完成。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦