当前位置: 首页 > 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;设计验证应确认设计的成果符合…...

【JVM】类加载的过程

文章目录 类的生命周期加载验证准备解析初始化简要概括 类的生命周期 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载 &#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xf…...

Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型

上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别&#xff0c;本文讲解下分组、上下文和属性值类型 分组输出 slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容&#xff0c;取决于使用的 handler&#xff0c;例如 TextHandler 使用点号分隔…...

小白学Python:提取Word中的所有图片,只需要1行代码

#python# 大家好&#xff0c;这里是程序员晚枫&#xff0c;全网同名。 最近在小破站账号&#xff1a;Python自动化办公社区更新一套课程&#xff1a;给小白的《50讲Python自动化办公》 在课程群里&#xff0c;看到学员自己开发了一个功能&#xff1a;从word里提取图片。这个…...

pip修改位于用户目录下的缓存目录

默认 pip 缓存目录&#xff1a; Windows: C:\Users\${用户名}\AppData\Local\pip\cache Linux: ~/.cache/pip 一、修改方式 1.命令方式 pip config set global.cache-dir "D:\kwok\data\pip-cache" 2.配置文件方式 ① Windows&#xff1a; C:\Users\${用…...

更新、修改

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法: update 表名 列名该列新值, 列名该列新值, ... where 记录匹配条件; 说明&#xff1a;update 更新、修改 set 设置 …...

山西电力市场日前价格预测【2023-09-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-25&#xff09;山西电力市场全天平均日前电价为442.30元/MWh。其中&#xff0c;最高日前电价为720.46元/MWh&#xff0c;预计出现在19: 00。最低日前电价为276.06元/MWh&#xff0c;预计…...

从collections库的Counter类看items()方法和enumerate()方法

下面的代码是针对文件的词频统计&#xff0c;使用了collections库及其Counter类 import collections def count_word_frequency(text): words text.lower().split() word_counts collections.Counter(words) return word_counts def count_fileword_frequency(fi…...

2023-09-24 LeetCode每日一题(LRU 缓存)

2023-09-24每日一题 一、题目编号 146. LRU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存i…...

《计算机视觉中的多视图几何》笔记(10)

10 3D Reconstruction of Cameras and Structure 本章主要描述了如何利用2张图片来恢复相机的参数以及物体在三维空间中的形状。 文章目录 10 3D Reconstruction of Cameras and Structure10.1 Outline of reconstruction method10.2 Reconstruction ambiguity10.3 The proje…...

【一、虚拟机vmware安装】

安装虚拟机 下载 官方下载地址&#xff1a;https://www.vmware.com/cn.html 大概流程就是&#xff0c;最重要的事最后一步...

温州网站制作费用/星巴克网络营销案例分析

[NOIP2017 普及组] 棋盘 题目背景 NOIP2017 普及组 T3 题目描述 有一个mmm \times mmm的棋盘&#xff0c;棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻&#xff0c;你所站在的位置必须是有颜色的&#…...

湖北响应式网站建设企业/短网址生成器免费

&#x1f4d2; 博客首页&#xff1a;✎﹏ℳ๓敬坤的博客 &#x1f388; &#x1f60a; 我只是一个代码的搬运工 &#x1f383; &#x1f389; 欢迎来访的读者关注、点赞和收藏 &#x1f91e; &#x1f609; 有问题可以私信交流 &#x1f606; &#x1f4c3; 文章标题&#xff1…...

沧州网站建设制作设计优化/天津抖音seo

-- -- Oracle 常见故障及日常规划 -- 对任何数据库系统而言&#xff0c;对显而易见的故障&#xff0c;应当避免发生本文列出了Oracle常见的故障并给出了解决方案&#xff0c;同时列出了一些日常规划。 一、数据库高可用性的几个目标 MTBF(Mean-Time-Between-Failures) 平均失败…...

eclipse网页制作教程/seo推广排名软件

目录 安装WiringPi 失败的过程&#xff1a; 选择的方法&#xff1a; 安装步骤&#xff1a; 找不到wiringPi.h文件解决方法 失败过程&#xff1a; 解决方法&#xff1a; 安装WiringPi 失败的过程&#xff1a; 通过分别使用sudo apt-get install wiringPi 和 wget https…...

公司网站开发语言/重庆seo管理平台

文章目录前端界面设计与优化完善登录界面的视图函数session会话和登出的视图函数将当前代码推送至Gitee添加图片验证码前端界面设计与优化 使用CSS框架 Bootstrap4&#xff0c;Bootstrap将CSS样式和JS都封装好了&#xff0c;可以直接使用。 下面使用的Bootstrap模板来自官方文…...

电脑如何做穿透外网网站/如何制作一个网页页面

从域控架构到中央集成式架构&#xff0c;跨域融合已经加速到来&#xff0c;从单一域控制器&#xff0c;到多域融合中央计算&#xff0c;市场门槛进一步抬升&#xff0c;市场也进入新一轮「攻坚」阶段。 高工智能汽车研究院发布《2023-2025年智能网联产业趋势报告》显示&#x…...