docker容器访问本地服务

news/2025/2/11 12:28:20/文章来源:https://www.cnblogs.com/Aliancn/p/18709516

方案一

使用 host 模式启动服务。

在 Docker 中,Host 模式桥接模式是两种常见的网络模式,它们决定了 Docker 容器如何与主机系统以及其他容器进行通信。

1. Host 模式启动

Host 模式使容器直接使用宿主机的网络栈,而不是通过虚拟网络接口。这意味着容器将与宿主机共享网络环境,包括 IP 地址和端口号。

工作原理

  • 容器使用宿主机的网络接口,不再通过虚拟网桥(bridge)进行通信。
  • 容器内的服务和应用会绑定到宿主机的网络接口上,直接暴露主机的 IP 地址,而不需要通过 NAT 或端口映射。
  • 容器之间的通信就像宿主机本地的进程一样直接,可以使用宿主机的 IP 地址进行访问。

优点

  • 容器的网络性能较高,因为不需要额外的网络虚拟化。
  • 容器可以直接访问宿主机的端口和服务。

缺点

  • 容器与宿主机共享网络栈,可能会造成安全隐患,因为容器内部的应用可以直接访问宿主机的网络服务。
  • 容器内的端口号无法与宿主机上的其他进程区分开,可能会导致端口冲突。

启动命令

docker run --network host <image>

2. 桥接模式启动

桥接模式(Bridge Mode)是 Docker 默认的网络模式,在这种模式下,Docker 会为每个容器创建一个虚拟的网络接口,并将它们连接到 Docker 的虚拟网桥(通常是 docker0)上。

工作原理

  • 容器的网络通过一个虚拟网桥连接,容器获得一个虚拟的 IP 地址(通常是私有的 IP 地址),该 IP 地址位于 Docker 网络内部。
  • 容器内的应用通过虚拟网桥与宿主机及其他容器进行通信。
  • 如果需要让容器暴露到外部网络,可以通过端口映射(p-publish)将容器的端口映射到宿主机的端口上。

优点

  • 默认模式,适用于大多数场景。
  • 容器与宿主机相互隔离,容器的网络地址不会直接暴露给宿主机,增强了安全性。
  • 支持容器之间的通信以及通过端口映射访问宿主机外部。

缺点

  • 由于容器通过虚拟网桥通信,可能会有轻微的性能损失,特别是在需要高网络吞吐量的场景下。
  • 需要通过端口映射来实现外部访问,这可能会带来一定的配置复杂性。

启动命令

docker run --network bridge <image>

总结

特性 Host 模式 桥接模式
网络共享 直接共享宿主机的网络栈 容器通过虚拟网桥与宿主机和其他容器进行通信
性能 更高性能,因为没有虚拟化的网络层 性能可能略低,因为需要通过虚拟网桥进行网络通信
安全性 较低,因为容器和宿主机共享网络,可能存在安全隐患 较高,容器之间和宿主机隔离,只有通过端口映射才能访问
端口管理 容器直接暴露宿主机 IP 地址,端口冲突可能性较大 通过端口映射暴露容器端口给宿主机,避免冲突
典型应用场景 性能要求较高的场景,或者容器需要访问宿主机的服务 默认网络模式,适用于大多数应用,需要良好的隔离性

方案二

docker 官方提供了一种支持方案,可通过指向 host.docker.internal 来指向宿主机的 IP。参见文档:从容器连接到主机上的服务

通用方法

Support host.docker.internal DNS name to host (opens new window)

在命令行后面添加参数
--add-host="host.docker.internal:host-gateway"

如果使用的是 docker-compose,则通过添加如下内容进行配置:

`extra_hosts:

  • 'host.docker.internal:host-gateway'`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/882045.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 系统变量

前言 简单介绍一下mysql的系统变量 正文 当我们之间查看mysql的系统变量的时候呢? 我们使用show variables,这样我们就可以查看到系统变量。 但是这样显然是没有意义的。可以看到很多很多的系统变量,如果想查具体的,那么就是: SHOW VARIABLES LIKE default_storage_engine又…

批量PDF文件转Word,免费!

今天推荐一款免费的PDF文件转换工具,它包括了PDF压缩、PDF转Word、PDF转Excel、提取PDF中图片等功能,下载地址在文末。 操作步骤 1、打开PDF转换工具,点击菜单PDF转Word,如下图2、添加需要转换的PDF文件,支持批量添加多个文件一起进行转换,如果一个目录下面的所有文件都需…

【博主亲测可用】科学计算软件:Wolfram Mathematica 14.2.0(附软件包及安装教程)

软件介绍 Wolfram Mathematica 14.2.0是一款功能全面且强大的数学计算与分析软件,它在大数据处理、人工智能集成、符号数组功能扩展、图形和可视化改进以及性能提升方面都有显著的增强。这些改进不仅使用户能够更高效地进行数据分析和科学计算,还极大地提升了用户体验。无论是…

硅基流动

使用硅基流动+Cherry ai部署 硅基流动网站:https://cloud.siliconflow.cn/i/OIItglHJ 邀请码:OIItglHJ 首次注册免费2000万Tokens Cherry ai网站:https://cherry-ai.com/download第一步,登入硅基流动网站,注册后 在左边选择api密钥,右上角选择新建api密钥新建后点击密钥…

Windows系统安装Ollama超简教程(附DeepSeek R1实战)

一、Ollama下载指引 官网地址:https://ollama.com/download选择Windows版本直接下载(推荐64位系统),安装包745MB左右,支持Win10/11系统。点击"Download for Windows"按钮即可开始下载。 二、安装过程详解双击下载的OllamaSetup.exe点击install之后,一路下一步就…

部署milvus2.5.3(standalone模式)

环境:os:Centos 7milvus:2.5.31.创建部署目录mkdir -p /home/middle/milvus2.准备docker-compose.yml配置文件内如如下: 我这里使用的是自己的镜像,需要根据自己环境情况进行修改[root@host135 milvus]# more docker-compose.yml version: 3.5services:etcd:container_name: m…

[书]清华大学DeepSeek:从入门到精通

通过网盘分享的文件:清华大学DeepSeek:从入门到精通.pdf等3个文件链接: https://pan.baidu.com/s/1y0-b3seTz7gMTTuPxYS7Vg?pwd=xd25 提取码: xd25一共三本资料

六. UML

UML 一. 事物 1.结构事物 结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。结构事物包括类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)、制品( Artifact)和结点(Node)。 各种结构事物的…

探索 QuestPDF:全平台支持、多功能、专业级的 .NET PDF 库

QuestPDF 是一个用于生成 PDF 文件的 .NET 库,它提供了一个简洁的 API 和灵活的布局选项,使得在 .NET 应用程序中创建 PDF 文件变得更加简单。 支持多平台,支持的功能有合并文档 附加文件 提取页面 加密/解密 扩展元数据 限制访问 针对 Web 进行优化 叠加层 / 底层安装 第一…

Java 中堆内存和栈内存上的数据分布和特点

说到 Java 中内存我们一般笼统地划分为堆内存(Heap)和栈内存(Stack),那么哪些数据被放置在堆内存?哪些数据被放置在栈内存?这些数据的分布有什么特点吗?博客:https://www.emanjusaka.com 博客园:https://www.cnblogs.com/emanjusaka 公众号:emanjusaka的编程栈by em…

AspNetCore 实战:三种流式响应机制详解

在现代Web应用中,实时数据传输和高效的数据流处理变得越来越重要。AspNetCore 提供了多种流式响应机制,以满足不同场景下的需求。 在使用ChatGpt,deepseek的适合有没有想过ai的逐字显示回答是怎么实现的,下面将介绍三种主要的流式响应来实现此功能。 Server-Sent Events (S…

java中反射-字节码和类加载器

多态的一个表现 子类类型赋值给父类 Father f1 = New Son() 调用子类方法报错。 调用父类方法OK。这个就是多态 一个对象能用什么方法,并不是取决于 它有什么方法。 而是取决于引用变量的类型(也就是取决于它声明的类型,Father类型) 它能够用的方法,一定是Father中的方法。 …