首页/云/Docker 容器速查/compose extra_hosts 注入 hosts 记录
Compose 编排55 条

compose extra_hosts 注入 hosts 记录

在 compose 文件里为服务追加 /etc/hosts 记录:常用 host-gateway 指向宿主机,或把内部系统域名解析到固定地址。

Docker 容器速查云更新于 2026-10-13

给容器补 hosts 记录

extra_hosts 在服务里追加 /etc/hosts 记录,用来把某个名字解析到指定地址。最常用的写法是把 host-gateway 映射成 host.docker.internal,让容器能访问宿主机上的服务;另一种是给内网系统域名指定固定 IP。记录在容器创建时写入,地址变化后需要重建容器,因此适合相对稳定的目标,不适合频繁变动的地址。

基本信息

字段extra_hosts 列表或映射形式
特殊值host-gateway 表示宿主机网关地址
生效时机容器创建时写入 /etc/hosts
解析优先级hosts 记录优先于 DNS 查询

典型使用场景

  • 容器访问宿主服务:本地开发时连宿主上的数据库或 mock 服务
  • 内网域名指到固定地址:某些系统没有内网 DNS,用 hosts 记录顶替
  • 规避 DNS 改造:短期方案里把关键域名写死到容器,减少依赖
  • 灰度切换:把某个域名临时指向新地址做验证
  • 跨环境统一配置:不同环境的解析目标通过编排文件注入

配置与验证

配置与验证
services:
  api:
    image: app/api:1.4.2
    extra_hosts:
      - "host.docker.internal:host-gateway"   # 指向宿主机
      - "legacy.internal:10.0.0.8"            # 内网系统固定地址
    environment:
      - UPSTREAM=http://host.docker.internal:9000

# 验证解析结果
# docker compose exec api getent hosts host.docker.internal

记录类型与场景

写法解析结果适用场景
host.docker.internal:host-gateway宿主机网关地址容器访问宿主上的服务
legacy.internal:10.0.0.8固定 IP内网域名解析到指定设备
多值同名记录按 hosts 顺序匹配需要临时把域名切到新地址验证
host-gateway 需要较新的 Docker 版本与对应平台支持,老版本环境里要改用宿主真实地址。
与 DNS 解析同名冲突时以 /etc/hosts 为准,排查解析异常先看这里有没有残留记录。
容器访问宿主服务时,除了加 hosts 记录,还要确认宿主上的服务监听地址覆盖容器来源网段:只绑定 127.0.0.1 的宿主服务,容器即使解析到正确地址也连不上。
轮换地址或切换上游时,先改编排文件再重建服务,让解析结果与配置保持同一版本,避免运行中的容器仍在使用旧地址。

易错点

  • 宿主地址变化后不重建容器:hosts 记录在创建时写入,改配置后要重建才能生效
  • 把频繁变动的地址写进 hosts:解析结果固化会让故障切换失效,动态地址应该交给 DNS
  • 老版本环境直接用 host-gateway:参数不支持导致启动失败,改用宿主实际地址
  • 排查时忽略 hosts 优先级:应用解析到的地址与 DNS 记录不一致,先看容器内 hosts 文件

数据来源与参考

  • Docker 官方文档:Compose extra_hosts(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌