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

告别重复劳动,用快马ai为centos7生成自动化运维脚本提升工作效率

告别重复劳动&#xff0c;用快马AI为CentOS7生成自动化运维脚本提升工作效率 作为一名长期和CentOS7打交道的运维人员&#xff0c;我深刻体会到日常工作中那些重复性配置任务有多耗费时间。直到最近尝试用InsCode(快马)平台的AI生成功能&#xff0c;才发现原来这些繁琐操作都能…...

如何快速集成JCameraView:5分钟实现微信级拍照功能

如何快速集成JCameraView&#xff1a;5分钟实现微信级拍照功能 【免费下载链接】CameraView 仿微信拍照Android控件&#xff08;轻触拍照&#xff0c;长按摄像&#xff09; 项目地址: https://gitcode.com/gh_mirrors/cam/CameraView JCameraView是一款仿微信拍照的Andr…...

实战应用:基于快马打造社交媒体稀有符号昵称生成器

今天想和大家分享一个特别实用的工具开发过程——用InsCode(快马)平台快速搭建社交媒体稀有符号昵称生成器。作为一个经常混迹各种社交平台的用户&#xff0c;我发现在微信、微博、游戏里想取个与众不同的昵称实在太难了&#xff0c;常规字符根本不够炫酷&#xff0c;而手动组合…...

如何用一个USB设备打造你的随身操作系统实验室?Portable-VirtualBox全攻略

如何用一个USB设备打造你的随身操作系统实验室&#xff1f;Portable-VirtualBox全攻略 【免费下载链接】Portable-VirtualBox Portable-VirtualBox is a free and open source software tool that lets you run any operating system from a usb stick without separate instal…...

OpenClaw人人养虾:macOS 开发环境设置

本指南介绍从源代码构建和运行 OpenClaw macOS 应用所需的步骤。 前置条件 在构建应用之前&#xff0c;请确保已安装以下工具&#xff1a; Xcode 26.2&#xff1a;Swift 开发所需。Node.js 22 和 pnpm&#xff1a;gateway、CLI 和打包脚本所需。 1. 安装依赖 安装项目级依…...

新手入门transformer不再难:用快马生成可运行、带详解的注意力机制代码

最近在学习深度学习中的transformer模型&#xff0c;发现很多教程要么太理论化&#xff0c;要么代码注释不够详细。作为新手&#xff0c;我特别希望能有一份带详细中文注释、可以实际运行的代码来帮助理解。经过一番摸索&#xff0c;发现用InsCode(快马)平台可以很好地解决这个…...

避坑指南:OpenClaw云端一键部署的5个关键配置,90%的人都踩过前3个

OpenClaw作为目前最火的开源AI智能体框架&#xff0c;凭借低代码、多模型兼容、全渠道对接&#xff08;飞书/钉钉/Telegram等&#xff09;的特性&#xff0c;已经成为个人开发者、中小团队搭建专属AI员工的首选方案。 各大云厂商也纷纷推出了OpenClaw一键部署镜像&#xff0c;号…...

intv_ai_mk11惊艳效果:24GB显存下Llama中型模型生成质量实测报告

intv_ai_mk11惊艳效果&#xff1a;24GB显存下Llama中型模型生成质量实测报告 1. 模型效果初体验 当我第一次在24GB显存的机器上运行intv_ai_mk11时&#xff0c;最直观的感受是&#xff1a;这个中等规模的Llama模型在文本生成质量上完全不输给那些需要更大显存的模型。从简单的…...

Intv_AI_MK11 Python数据分析搭档:环境配置与自动化脚本生成

Intv_AI_MK11 Python数据分析搭档&#xff1a;环境配置与自动化脚本生成 1. 为什么需要AI辅助的数据分析环境 数据分析师每天要处理大量重复性工作&#xff1a;数据清洗、报告撰写、图表生成。这些工作既耗时又容易出错。Intv_AI_MK11作为新一代AI助手&#xff0c;可以帮你自…...

企业网站关键词 SEO 优化大概需要多少费用

企业网站关键词 SEO 优化大概需要多少费用 在当今数字化经济时代&#xff0c;企业网站的SEO优化已经成为了提升网站流量和品牌知名度的重要手段。企业网站关键词 SEO 优化大概需要多少费用呢&#xff1f;这个问题的答案并不简单&#xff0c;因为涉及到多方面的因素。本文将详细…...