如何在docker中访问宿主机其他服务的接口

news/2025/2/22 22:11:36

dockerinternal_2">1. 使用 host.docker.internal(推荐)

  • 适用场景:Docker Desktop(Windows 和 macOS)或 Docker Engine 18.03+(Linux)。

  • 原理:Docker 提供了一个特殊的主机名 host.docker.internal,指向宿主机。

  • 使用方法

    1. 容器中访问宿主机服务时,使用 host.docker.internal 代替 localhost127.0.0.1
    2. 例如,如果宿主机上运行了一个 HTTP 服务,端口为 8080,可以在容器中通过以下地址访问:
      http://host.docker.internal:8080
      
  • 注意

    • 在 Linux 上,默认不支持 host.docker.internal,需要手动配置(见下文)。
    • 如果使用 Docker Compose,可以在 docker-compose.yml 中直接使用 host.docker.internal

2. 使用 --network="host"

  • 适用场景:Linux 环境。

  • 原理:将容器与宿主机共享网络命名空间,容器直接使用宿主机的网络接口。

  • 使用方法

    1. 启动容器时添加 --network="host" 参数:
      docker run --network="host" <image_name>
      
    2. 容器中访问宿主机服务时,直接使用 localhost127.0.0.1
      http://localhost:8080
      
  • 注意

    • 此方法仅适用于 Linux,Windows 和 macOS 不支持。
    • 容器与宿主机共享网络,可能会导致端口冲突。

3. 使用宿主机的 IP 地址

  • 适用场景:所有操作系统。

  • 原理:通过宿主机的实际 IP 地址访问服务。

  • 使用方法

    1. 获取宿主机的 IP 地址:
      • Linux/macOS
        ifconfig  # 查找网络接口的 IP 地址
        
      • Windows
        ipconfig  # 查找网络接口的 IP 地址
        
    2. 容器中访问宿主机服务时,使用宿主机的 IP 地址:
      http://<宿主机IP>:8080
      
  • 注意

    • 如果宿主机 IP 是动态分配的(如 DHCP),可能需要固定 IP。
    • 确保宿主机的防火墙允许容器访问。

4. 使用 Docker 自定义网络

  • 适用场景:需要容器与宿主机服务隔离的场景。
  • 原理:创建一个 Docker 自定义网络,将容器和宿主机服务加入同一网络。
  • 使用方法
    1. 创建自定义网络:
      docker network create my_network
      
    2. 启动容器并加入自定义网络:
      docker run --network my_network <image_name>
      
    3. 容器中访问宿主机服务时,使用宿主机的 IP 地址或主机名。

5. 使用 --add-host 手动映射宿主机 IP

  • 适用场景:需要手动指定宿主机 IP 的场景。
  • 原理:通过 --add-host 参数将宿主机 IP 映射到自定义主机名。
  • 使用方法
    1. 获取宿主机的 IP 地址(如 192.168.1.100)。
    2. 启动容器时添加 --add-host 参数:
      docker run --add-host host:192.168.1.100 <image_name>
      
    3. 容器中访问宿主机服务时,使用自定义主机名:
      http://host:8080
      

6. 使用 Docker Compose

  • 适用场景:使用 Docker Compose 管理多容器服务。
  • 使用方法
    1. docker-compose.yml 中配置 extra_hosts
      version: '3'
      services:
        my_service:
          image: <image_name>
          extra_hosts:
            - "host:192.168.1.100"  # 手动映射宿主机 IP
      
    2. 容器中访问宿主机服务时,使用自定义主机名:
      http://host:8080
      

总结

  • 推荐方法
    • Windows/macOS:使用 host.docker.internal
    • Linux:使用 --network="host"host.docker.internal(需手动配置)。
  • 通用方法
    • 使用宿主机的 IP 地址。
    • 使用 Docker 自定义网络或 --add-host

http://www.niftyadmin.cn/n/5862798.html

相关文章

Java的Kotlin/Java互操作性

# Java的Kotlin/Java互操作性 介绍 在日常的软件开发中&#xff0c;我们经常会使用多种编程语言来完成不同的任务。Java和Kotlin是两种非常流行的编程语言&#xff0c;它们各有优势&#xff0c;而且它们之间具有非常好的互操作性。本文将介绍Java的Kotlin/Java互操作性&#xf…

bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全

ETL & 流批一体化框架 bboss v7.3.5 发布&#xff0c;多源输出插件增加为特定输出插件设置记录过滤功能&#xff1b;Elasticsearch 客户端新增异地双中心灾备机制&#xff0c;提升框架高可用性&#xff1b;Elasticsearch client 和 http 微服务框架增加对 Kerberos 认证支持…

react hook useReducer

useReducer useReducer 是 React 中用于状态管理的 Hook&#xff0c;与 useState 不同&#xff0c;它更适合处理复杂的状态逻辑. const [state, dispatch] useReducer(reducer, initialArg, init?) reducer 是一个处理函数&#xff0c;用于更新状态, reducer 里面包含了两个…

基于Flask的京东商品信息可视化分析系统的设计与实现

【Flask】基于Flask的京东商品信息可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统能够灵活地执行SQL查询&#xff0c;提取出用于分析的关键数据指标。为了将这…

SHELL32!Shell_MergeMenus函数分析

SHELL32!Shell_MergeMenus函数分析 UINT Shell_MergeMenus( [in] HMENU hmDst, [in] HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags ); 参数 [in] hmDst 类型&#xff1a; HMENU 要向其添加 hmSrc…

Mac【卸载 Python】 - 3.12.2

一、若使用官方安装包安装 1. 删除 Python 框架 Python 官方安装包会将 Python 安装到 /Library/Frameworks/Python.framework/Versions/3.12 目录下。你可以在终端中使用以下命令删除该目录&#xff1a; sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.12 …

计算机专业知识【深入理解IP网段:192.168.1.1/24 与 192.168.1.0/24】

在网络世界里&#xff0c;IP地址和网段是非常基础却又至关重要的概念。很多朋友在看到类似 192.168.1.1/24 和 192.168.1.0/24 这样的表述时&#xff0c;可能会感到困惑。今天&#xff0c;我们就来详细剖析一下它们的含义以及两者之间的关系。 一、IP地址与子网掩码基础 在深…

Android WiFi BT 模组移植 分层详解

Android WiFi BT 模组移植 分层详解 作者&#xff1a;Witheart更新时间&#xff1a;20250220 1. 系统分层架构 通常可以将WiFi和BT的软件架构划分为以下几个层次&#xff1a; &#xff08;1&#xff09;应用层&#xff08;Application Layer&#xff09; 主要负责提供用户接…