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

(五)docker环境中配置hosts

目录

1. 三种方法配置hosts文件以实现域名解析 ​

1.1 启动容器时加上“—add-host”参数

1.2  通过docker-compose配置extra_hosts属性

 1.3 通过k8s管理容器时配置hostAliases

2. 解析openwebui中的host.docker.internal及 host-gateway

2.1 host.docker.internal

2.2 host-gateway

2.3 使用场景

2.4 使用方法

2.4.1 命令行配置

2.4.2 Docker Compose 配置

2.4.3 代码中直接访问

2.5 不同环境的兼容性

2.6 注意事项

2.7 替代方案

2.8 常见问题

3. 官方参数


1. 三种方法配置hosts文件以实现域名解析 ​

1.1 启动容器时加上“—add-host”参数

docker run --add-host='www.lyb-geek.com:127.0.0.1' --add-host='www.lyb-geek.cn:192.168.3.1' --name hello-docker -it 192.168.0.1:5002/lybgeek/hello-docker:1.0

通过在启动容器时加上“—add-host”参数,可以在容器内部将指定的域名映射到指定的IP地址

1.2  通过docker-compose配置extra_hosts属性

version: '3'services:web:image: nginx:alpineextra_hosts:- 'www.lyb-geek.com:127.0.0.1'- 'www.lyb-geek.cn:192.168.3.1'

通过在docker-compose文件中配置extra_hosts属性,可以在启动容器时将指定的域名映射到指定的IP地址。

 1.3 通过k8s管理容器时配置hostAliases

在创建pod的yaml文件中添加hostAliases配置,将域名映射到IP地址。

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp:latest
hostAliases:
- ip: '192.168.3.1'
hostnames: ['www.lyb-geek.cn']

通过在Kubernetes的Pod定义文件中配置hostAliases,将指定的域名映射到指定的IP地址。这样,在容器内部就可以通过这些域名进行访问了。

2. 解析openwebui中的host.docker.internal及 host-gateway

docker run -p 3000:8080 --rm --name open-webui \--add-host=host.docker.internal:host-gateway \-v open-webui:/app/backend/data \ghcr.io/open-webui/open-webui:main

host.docker.internal 和 host-gateway 是用于实现容器与宿主机通信的重要机制

2.1 host.docker.internal

  • 作用:一个由 Docker 自动解析的 DNS 名称,指向宿主机的内部 IP 地址。

原理:

  • Docker 在容器内维护一个 DNS 解析规则,将 host.docker.internal 映射到宿主机的网关地址。
  • 在 Linux 上,默认情况下 Docker 不直接支持此名称,但 Docker Desktop(macOS/Windows)会自动配置。
  • 在 Linux 系统中,需通过 --add-host=host.docker.internal:host-gateway 手动映射。

2.2 host-gateway

  • 作用:一个特殊的占位符,代表宿主机的网络网关地址。

  • 原理

    • 当 Docker 检测到 host-gateway 时,会自动替换为宿主机的当前网关 IP(例如 172.17.0.1)。

    • 避免手动查询宿主机 IP,提供跨平台的兼容性(如 macOS、Windows、Linux)。

2.3 使用场景

  • 开发调试:容器内访问宿主机上运行的数据库、API 服务或调试工具。
  • 跨服务通信:宿主机作为中间件(如 Redis、RabbitMQ)的代理。
  • CI/CD 环境:在 Docker-in-Docker 或 Kubernetes 中简化网络配置。

2.4 使用方法

2.4.1 命令行配置

# 在容器中映射 host.docker.internal 到宿主机 IP
docker run --add-host=host.docker.internal:host-gateway your-image

2.4.2 Docker Compose 配置

services:your-service:image: your-imageextra_hosts:- "host.docker.internal:host-gateway"

2.4.3 代码中直接访问

在容器内通过 http://host.docker.internal:<port> 访问宿主机服务:

# 示例:Python 访问宿主机 API
import requests
response = requests.get("http://host.docker.internal:8080/api")

2.5 不同环境的兼容性

  • Docker Desktop:原生支持 host.docker.internal,无需额外配置。
  • Linux 原生 Docker:需手动添加 --add-host=host.docker.internal:host-gateway 或修改 /etc/hosts
  • Kubernetes: 不支持 host.docker.internal,需通过 Service 或 Downward API 获取宿主机 IP。

2.6 注意事项

  • 安全性:宿主机的服务需绑定到 0.0.0.0(而非 127.0.0.1),否则容器无法访问。

  • 生产环境:避免依赖此机制,应通过服务发现或明确配置 IP/域名。

  • 网络模式:在 --network=host 模式下,容器直接共享宿主机网络,无需此配置。

2.7 替代方案

  • 直接使用宿主机 IP:通过 ifconfig 或 ip addr 获取 IP,但缺乏跨平台兼容性。
  • 自定义网络:创建 Docker 自定义网络并静态分配 IP,适合复杂拓扑。
  • 服务发现工具:Consul、etcd 等动态管理服务地址。

2.8 常见问题

Q1: 容器内无法解析 host.docker.internal?
解决:确保 Docker 版本 ≥ 18.03,或在 Linux 中手动添加 --add-host。

Q2: 宿主机服务无法访问?
        检查项:

                服务是否监听 0.0.0.0。

                防火墙是否放行端口。

                Docker 网络是否为默认 bridge。

Q3: 如何在 Kubernetes 中实现类似功能?
方案:通过 hostNetwork: true 或 NodePort Service 暴露宿主机端口。

3. 官方参数

【官方--add-host】docker container run | Docker Docshttps://docs.docker.com/reference/cli/docker/container/run/#add-host

http://www.xdnf.cn/news/968545.html

相关文章:

  • React19源码系列之 事件插件系统
  • 鹰盾视频的AI行为检测是怎样的风控?
  • 黑马python(二)
  • 分析VSS,VCC和VDD
  • 206. 2013年蓝桥杯省赛 - 打印十字图(困难)- 模拟
  • 第三章支线五 ·组件之城 · 构建与复用的魔法工坊
  • 基于数字孪生的水厂可视化平台建设:架构与实践
  • nsight system分析LLM注意事项
  • PI数据库全面解析:原理、应用、行业案例与优劣对比
  • MySQL学习之触发器
  • Oracle实用参考(13)——Oracle for Linux ASM+RAC环境搭建(1)
  • 【AI News | 20250610】每日AI进展
  • 2.Vue编写一个app
  • Python实例题:Python计算实变函数
  • python打卡第50天
  • 题单:二分查找(==x个数)
  • 纯血Harmony NETX 5 打造趣味五子棋:(附源文件)
  • win11本地Docker部署腾讯云Docker部署若依前后端分离版
  • 解析 Go 语言中 time 包在实现定时任务时的易错点
  • Zustand 状态管理库:极简而强大的解决方案
  • c++中cout的用法 标准输出流cout使用指南
  • Linux操作系统之文件系统上
  • 编程风格良好的条件比较语句
  • 基于NOMP和降维字典的杂波空时功率谱稀疏恢复算法matlab仿真
  • PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
  • 解决helm Doris重启后由于root密码修改导致加入集群不成功的问题
  • python数据结构和算法(3)
  • 智慧医疗能源事业线深度画像分析(上)
  • 项目四.高可用集群_ansible
  • 【OSG学习笔记】Day 18: 碰撞检测与物理交互