当前位置: 首页 > news >正文

(四)docker:为mysql和java jar运行环境创建同一网络,容器互联

  1. 看了很多资料,说做互联的一个原因是容器内ip不固定,关掉重启后如果有别的容器启动,之前的ip会被占用,所以做互联创建一个网络,让几个容器处于同一个网络,就可以互联还不受关闭再启动ip会改变的影响,但是其实我拿我做的mysql测试,不管是代码里还是sql连接工具,使用容器内ip根本连接不到,只有使用我本机的ip连接才能连接上,所以实际容器内部ip变化对我的使用并没有影响,但是我特别在网上查了很多,他们好像用本地ip都连接不上,只能用容器内的ip,这个我就不直到为什么了,不过我只是为了学习如何创建网络,以及将新建的容器和既存的容器连接到一个网络即可,现在不懂的地方可以在以后有机会的时候就能知道为什么了,忽略次要的,重点先学会用。
  2. 先创建一个网络
   docker network create -d bridge sixdog
  1. 查看创建的网络
sixdog@sixiaodong dockerfile % docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5451e1cd08f8   bridge    bridge    local
d8b19cbdca68   host      host      local
f46cec15b991   none      null      local
1dadf784140f   sixdog    bridge    local
  1. 我现在有一个既存的容器mysql-dev,准备把它连接到sixdog网络里

4.1 查看mysql-dev容器

sixdog@sixiaodong dockerfile % docker ps -a
CONTAINER ID   IMAGE                       COMMAND                   CREATED         STATUS                      PORTS                               NAMES
465ae184cd56   mysql:latest                "docker-entrypoint.s…"   23 months ago   Up 24 hours                 33060/tcp, 0.0.0.0:3307->3306/tcp   mysql-dev

4.2 查看mysql-dev部分网络信息

sixdog@sixiaodong dockerfile % docker inspect mysql-dev
其他部分省略
"Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "5451e1cd08f83eeba5495ecd8041332382c20068fa44e103b759442217f62867","EndpointID": "4388a57b5eed4fb767d918eb274a8b631d1e8fa8793909e6373a9e2c5466c580","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null}}

4.3 尝试连接

sixdog@sixiaodong dockerfile % docker network connect sixdog mysql-dev

4.4 查看网络信息

sixdog@sixiaodong dockerfile % docker inspect mysql-dev  
其他部分省略
"Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "5451e1cd08f83eeba5495ecd8041332382c20068fa44e103b759442217f62867","EndpointID": "4388a57b5eed4fb767d918eb274a8b631d1e8fa8793909e6373a9e2c5466c580","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null},"sixdog": {"IPAMConfig": {},"Links": null,"Aliases": ["465ae184cd56"],"NetworkID": "1dadf784140fe418f4bd421b63ecd06ed46a1ebf41d386fba725e454349acb86","EndpointID": "1fc1d1d1dcaa6f37732690e82b684370638070a76c3d6a7ee08ebe94474711e8","Gateway": "172.18.0.1","IPAddress": "172.18.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:12:00:02","DriverOpts": {}}}

4.5 我用dbeaver使用172.18.0.2连接了下,连接不上mysql-dev,用我本机的ip可以

  1. 新建一个jar的运行环境,配置启动时的外部配置文件里的mysql连接ip改为172.18.0.2,并把这个新创建的容器加到sixdog网络里
    5.1 新建一个jar的运行环
#db访问配置
spring.datasource.url=jdbc:mysql://172.18.0.2:3307/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName =com.mysql.cj.jdbc.Driverserver.port=8082
sixdog@sixiaodong dockerfile % docker run --name appsixdog --network sixdog -p 8082:8082 -d app:v1
74c9a0faaaff167802fd6532278e8e10fe0a1d3cb993c275fe32e064e130fb2d

5.2 查看容器

sixdog@sixiaodong dockerfile % docker ps -a
CONTAINER ID   IMAGE                       COMMAND                   CREATED         STATUS                      PORTS                               NAMES
74c9a0faaaff   app:v1                      "java -Dspring.confi…"   9 seconds ago   Up 8 seconds                0.0.0.0:8082->8082/tcp              appsixdog

5.3 查看网络配置

sixdog@sixiaodong dockerfile % docker inspect appsixdog
部分省略
"Networks": {"sixdog": {"IPAMConfig": null,"Links": null,"Aliases": ["74c9a0faaaff"],"NetworkID": "1dadf784140fe418f4bd421b63ecd06ed46a1ebf41d386fba725e454349acb86","EndpointID": "9c64f3dc6bbe49a7ffbfd699b946e55b9ff8d006591d38c2e0fe4fe86602f565","Gateway": "172.18.0.1","IPAddress": "172.18.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:12:00:03","DriverOpts": null}}

5.4 访问页面
…很遗憾,可能是外部配置的文件没有生效所以8082的画面访问失败,我删掉了使用8081再来一遍
5.5.想起来了,需要把配置文件拷贝到容器内

sixdog@sixiaodong dockerfile % docker cp ./application.properties 00581903345c:/home/application.propertiesSuccessfully copied 2.56kB to 00581903345c:/home/application.properties

5.6 进容器内查看确认内容

docker exec -i -t appsixdog /bin/bash

5.7.重启容器

sixdog@sixiaodong dockerfile % docker restart appsixdog
appsixdog

5.8 再次确认画面,报错了,调查后发现其实在容器内品mysql的ip是可以的拼通的,最后意识到,在eclipse里配置的端口是创建容器时映射到外边的3307,而容器内是3306,修改后重启容器,画面可以打开,证明联网后容器可以互相访问,但是要注意端口等信息以容器内为准,而不是创建容器时外边的端口
在这里插入图片描述

http://www.lryc.cn/news/216678.html

相关文章:

  • 【kafka】记一次kafka基于linux的原生命令的使用
  • C语言或C++结构体及其变量的创建方式汇总
  • mysql之基础语句
  • Sentinel 哨兵数据 更新下载地址 2023年11月
  • 动态路由协议OSPF项目部署(二)
  • winscp文件增量同步到linux服务器
  • 足足68个!Python函数合集请收好!
  • vue2.0 打包,nginx部署
  • 微服务架构之路1,服务如何拆分?使用微服务的注意事项?
  • 解决Mac电脑音乐显示歌名的乱码问题
  • 赢在电商设计!2024年最新电商设计实战技巧盘点
  • 约数之和 (普通快速幂求逆元做法)
  • 每日一题(LeetCode)----二分查找(三)
  • 使用 TensorFlow FasterRCNN 网络进行目标检测
  • 数据结构——顺序表(SeqList)
  • Uni-App 快捷登录
  • DbUtils + Druid 实现 JDBC 操作 --- 附BaseDao
  • css:元素居中整理水平居中、垂直居中、水平垂直居中
  • 从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型
  • React18新特性?
  • 筹码博弈K线长阳选股公式,穿越筹码密集区
  • 微服务设计模式-架构真题(六十八)
  • LeetCode----52. N 皇后 II
  • 解决pycharm中,远程服务器上文件找不到的问题
  • 虹科荣誉 | 喜讯!虹科成功入选“广州首届百家新锐企业”!!
  • 如何利用Jmeter从0到1做一次完整的压测?这2个步骤很关键!
  • 基于STM32+微信小程序设计的智能门锁(4种开锁方式)_2023
  • 享受户外的美好时光:花园吊椅的魅力
  • 游戏中找不到d3dx9_43.dll怎么办,教你快速解决方法
  • 蓝桥杯:买不到的数目