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

docker部署springboot程序时遇到的network问题

对应问题,因为刚开始接触docker,所以问题可能比较简单,但是做个记录
1、启动一个springboot项目获取本地ip的时候获取到的是172.17.0.x这个ip;在使用一些注册中心,mq的时候又要表明自己的本机器ip的时候会比较头疼;
2、机器上有两个docker容器,需要进行通信,比如什么grpc。。。
对于上述两个小问题,可以通过绑定docker的network来进行解决
解决的方式:
1、两个容器如果都使用host模式,最简单粗暴 共用主机的网络;(ip获取错误和容器间的通信都可以解决)
怎么看是什么模式的,
通过docker inspect 容器id 查看一个NetworkID的key ,
然后docker network ls 看这个NetworkID 的DRIVER是什么类型;
docker run -d --name xx --network host xx

2、如果需要进行通信的目标容器是自定义的network,那么就需要指定这个network为需要进行通信的容器的network模式(可以解决容器间通信的问题,但是能否解决获取ip的问题,就需要看目标容器的network类型了,host是可以的,对于bridge桥接则不行,或者说桥接需要配置一下ip信息)
怎么看这个容器用的是那个network
通过docker inspect 容器id 查看一个NetworkID的key ,
然后docker network ls 看这个NetworkID 的name是什么;
启动的时候绑定就可以
docker run -d --name xx --network xx(network的name) xx

查看某个network关联了哪些容器:docker network inspect xx(network的name)

一、docker network介绍

我们先来看看docker network官网对它的解释:https://docs.docker.com/network/drivers/
官网文中描述到:
容器网络是指容器相互连接和通信的能力,或者与非docker工作负载进行通信的能力
容器没有关于它所连接的网络类型的信息,或者它们的对等节点是否也是Docker工作负载。容器只能看到一个带有IP地址、网关、路由表、DNS服务和其他网络详细信息的网络接口。也就是说,除非容器使用无网络驱动程序。
文中从容器的角度描述了网络,以及有关容器网络的概念。文中没有描述Docker网络如何工作的特定于操作系统的细节。有关Docker如何在Linux上操作iptables规则的信息,请参见包过滤和防火墙。

二、端口的映射

默认情况下,当使用docker create或docker run创建或运行容器时,容器不会向外部世界公开其任何端口。使用——publish或-p标志使端口对Docker以外的服务可用。这会在主机中创建一个防火墙规则,将容器端口映射到Docker主机上指向外部世界的端口。

如:docker run -d --name xx -p 80:80 xx
-p 8080:80将容器中的TCP端口80映射到Docker主机上的8080端口。
-p 192.168.1.100:8080:80将容器内的TCP端口80映射到Docker主机上的8080端口,用于连接IP 192.168.1.100的主机。
-p 8080:80/ UDP将容器内的UDP端口80映射到Docker主机上的8080端口。
-p 8080:80/tcp -p 8080:80/ UDP将容器的tcp 80端口映射到Docker主机的tcp 8080端口,将容器的UDP 80端口映射到Docker主机的UDP 8080端口。

如果您希望使一个容器可以被其他容器访问,则不需要发布容器的端口。通过将容器连接到相同的网络(通常是桥接网络),可以实现容器间通信

三、docker的ip和端口

默认情况下,容器会为它连接的每个Docker网络获取一个IP地址。容器从网络的IP子网中接收IP地址。Docker守护进程为容器执行动态子网划分和IP地址分配。每个网络也有一个默认的子网掩码和网关。
还有一些细节可以参考官网进行多样化的配置;

四、DNS services

有兴趣可以去关注一下;

五、Network drivers docker的网络驱动(本次介绍重点 )

Docker的网络子系统是可插拔的,使用驱动程序。默认存在几个驱动程序,并提供核心网络功能:

  • bridge:默认的网络驱动程序。如果您没有指定驱动程序,这就是您正在创建的网络类型。当应用程序在需要与同一主机上的其他容器通信的容器中运行时,通常使用桥接网络。参见网桥网络驱动程序。
    默认桥接网络非常适合运行不需要特殊网络功能的容器。

  • host:取消容器和Docker主机之间的网络隔离,直接使用主机的网络。请参见主机网络驱动程序。
    主机网络与容器共享主机的网络。当您使用这个驱动程序时,容器的网络不会与主机隔离

  • overlay: overlay网络将多个Docker守护进程连接在一起,使Swarm服务和容器能够跨节点通信。这种策略不需要做操作系统级别的路由。参见覆盖网络驱动程序。
    当你需要在不同的Docker主机上运行的容器进行通信,或者当多个应用程序使用Swarm服务一起工作时,覆盖网络是最好的。

  • ipvlan: ipvlan网络允许用户完全控制IPv4和IPv6寻址。VLAN驱动程序建立在此基础之上,为对底层网络集成感兴趣的用户提供了对第2层VLAN标记甚至IPvlan L3路由的完全控制。参见IPvlan网络驱动程序。
    IPvlan类似于Macvlan,但不为容器分配唯一的MAC地址。当可以分配给网络接口或端口的MAC地址数量受到限制时,请考虑使用IPvlan。

  • macvlan: macvlan网络允许您为容器分配MAC地址,使其在网络上显示为物理设备。Docker守护进程根据容器的MAC地址将流量路由到容器。当处理期望直接连接到物理网络而不是通过Docker主机的网络堆栈路由的遗留应用程序时,使用macvlan驱动程序有时是最佳选择。参见Macvlan网络驱动程序。
    当您从虚拟机设置迁移或需要容器看起来像网络上的物理主机,每个容器都有唯一的MAC地址时,Macvlan网络是最好的

  • none:将容器与主机和其他容器完全隔离。对于Swarm服务,none是不可用的。请参见无网络驱动程序。

bridge

官方提到:Remember, the default bridge network is not recommended for production.
不建议将默认桥接网络用于生产环境
在用户定义网络上,容器不仅可以通过IP地址进行通信,还可以将容器名称解析为IP地址被称为:automatic service discovery自动服务发现

host

官网以部署nginx为例子
本教程的目标是启动一个nginx容器,它直接绑定到Docker主机上的80端口。从网络的角度来看,这与nginx进程直接在Docker主机上运行而不是在容器中运行是相同的隔离级别。但是,在所有其他方面,如存储、进程名称空间和用户名称空间,nginx进程与主机是隔离的。
**The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.**不支持linux之外的形式绑定;
linux通过该形式绑定:
docker run -d --network host --name my_nginx nginx

因为该进程由Docker守护进程用户拥有,所以需要高级权限查看
sudo netstat -tulpn | grep :80 或者 curl -v 127.0.0.1:port

至于其他的自定义/container模式尚未在官网寻找到。。。后续补充

相关文章:

docker部署springboot程序时遇到的network问题

对应问题,因为刚开始接触docker,所以问题可能比较简单,但是做个记录 1、启动一个springboot项目获取本地ip的时候获取到的是172.17.0.x这个ip;在使用一些注册中心,mq的时候又要表明自己的本机器ip的时候会比较头疼&…...

RASP hook插桩原理解析

javaagent技术,实现提前加载类字节码实现hook,插桩技术 javassist技术ASM字节码技术 像加载jar,有两种方式 premain启动前加载:每次变动jar包内容,都需要进行重启服务器利用java的动态attch加载原理,采用pr…...

Pygame中Sprite的使用方法6-5

3 碰撞检测 蓝色方块会随着鼠标移动,当碰到绿色方块时,则当前分数加1,当碰到红色方块时,当前分数减1。因为要随时进行碰撞检测,因此需要在while True循环中实现以下功能。 3.1 蓝色方块随鼠标移动 将蓝色方块的位置…...

浅谈为什么多态只能是指针或引用

其实在很早之前,我一直没有注意到这个问题,直到今天碰见了一道题,顺便前面的博客中,继承写到,子类中不包含父类,子类只是继承了父类的成员变量和函数,由这一点,引发了我对切片以及赋…...

js看代码说输出

目录 原型 Function与Object new fn() 原型链 constructor function.length 默认参数:第一个具有默认值之前的参数个数 剩余参数:不算进length 闭包 循环中 函数工厂:形参传递 IIFE:匿名闭包 let:闭包 forEach()&am…...

Java笔记:使用javassist修改class文件内方法

1.前言 在工作突然有一个需求。线上运维的一个tomcat的web项目,运行的程序不正常。需要修改代码。可是这个项目代码非常的老,并且公司存储的源代码跟线上的不一致。 我了个擦,没有源代码但是还要结局客户的问题。只能到线上将对应程序的clas…...

华为云云耀云服务器L实例评测 |云服务器性能评测

通过上一篇文章华为云云耀云服务器 L 实例评测 |云服务器选购,我已经购买了一台 Centos 系统的云耀云服务器 L 实例。 在获得云耀云服务器 L 实例后,首要任务是熟悉云耀云服务器 L 实例的性能,对云耀云服务器 L 实例的性能进行测…...

iphone的safari浏览器实现全屏的pwa模式,并修改顶部状态栏背景颜色

要想修改顶部背景颜色&#xff0c;需要用到这个属性&#xff1a;content就是你要设置的颜色 <!-- 状态栏的背景色 --><meta name"theme-color" content"#f8f8f8" /> 然后再加上下面的设置&#xff1a; <!-- 网站开启对 web app 程序的支持…...

springboot对接rabbitmq并且实现动态创建队列和消费

背景 1、对接多个节点上的MQ&#xff08;如master-MQ&#xff0c;slave-MQ&#xff09;&#xff0c;若读者需要自己模拟出两个MQ&#xff0c;可以部署多个VM然后参考 docker 安装rabbitmq_Steven-Russell的博客-CSDN博客 2、队列名称不是固定的&#xff0c;需要接受外部参数&…...

Spring的后处理器-BeanFactoryPostprocessor

目录 Spring后处理器 Bean工厂后处理器-BeanFactoryPostProcessor 修改beanDefinition对象 添加beanDefiniton对象 方法一 方法二 自定义Component Spring后处理器 Spring后处理器是Spring对外开放的重要拓展点&#xff08;让我们可以用添加自己的逻辑&#xff09;&…...

Flutter 必备知识点

Flutter 升级 确保在项目根目录下&#xff08;含有 pubspec.yaml 的文件夹&#xff09; 在命令行中输入命令&#xff1a; flutter channel输出&#xff1a; Flutter channels: * mastermainbetastable这个可以在 pubspec.yaml 中查看&#xff1a; 切换分支也很简单&#xf…...

什么是FMEA(失效模式和影响分析)?

失效模式和影响分析&#xff08;FMEA&#xff09;是一个在开发阶段&#xff0c;用于确定产品或流程可能的风险和失败点的有条理的过程。FMEA团队会研究失效模式&#xff0c;也就是产品或流程中可能出错的地方&#xff0c;以及这些失效可能带来的影响&#xff08;如风险、损害、…...

Redis面试题(三)

文章目录 前言一、怎么理解 Redis 事务&#xff1f;二、Redis 事务相关的命令有哪几个&#xff1f;三、Redis key 的过期时间和永久有效分别怎么设置&#xff1f;四、Redis 如何做内存优化&#xff1f;五、Redis 回收进程如何工作的&#xff1f;六、 加锁机制总结 前言 怎么理…...

Python错误处理指南:优雅应对异常情况

目录 一. 异常是什么&#xff1f;二. 使用 try 和 except三. 捕获多个异常四. 使用 else五. 使用 finally六. 自定义异常七.Python中常见异常处理类型八.Python中常见异常处理实例九.异常处理最佳实践十.结论 当编写Python代码时&#xff0c;错误处理是一个重要的方面&#xff…...

MySQL学习笔记12

MySQL 查询语句&#xff1a; 1、查询五子句&#xff1a;&#xff08;重点&#xff09; mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句; 1&#xff09;where 子句&#xff1b;条件筛选。 2&#xff09;group…...

【owt】构建m79的owt-client-native:使用vs2017

家里电脑换成了台式机,拷贝代码发现了三年前的owt客户端mfc工程。 不用下载第三方库,试着构建下: owt-client-native 我这里有3年前的代码,思索了下还是用vs2017构建吧: 重新构建一下 选用x86 的 vs2017 vs的命令行控制台 cls可以清理屏幕 之前构建过vs2022的webrtc原版 …...

Cpp/Qt-day020918Qt

目录 完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两…...

Spring面试题10:Spring的XMLBeanFactory怎么使用

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…...

自定义数据类型

前言&#xff1a;小伙伴们又见面啦&#xff0c;今天这篇文章&#xff0c;我们来谈谈几种自定义数据类型。 目录 一.都有哪些自定义数据类型 二.结构体 结构体内存对齐 1.如何对齐 2.为什么要对齐 3.节省空间和提升效率的方法 &#xff08;1&#xff09;让占用空间小的成员…...

产品团队的需求验证和确认

需求核实过程是确保软件满足特定的规格要求&#xff0c;而验证则侧重于软件是否达到了最终用户的期望和需求。 如果你正在开发一种医疗产品&#xff0c;这种区别也可能在法规和标准中有所体现&#xff0c;例如&#xff1a; 820.30(f)&#xff1a;设计验证应确认设计的成果符合…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...