You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内如何为host.docker.internal配置域名别名?

可行方案

根据部署场景选择对应方案即可,两种方案都不需要手动维护固定IP,服务重启后解析规则自动生效。


场景1:9000端口的目标服务同样运行在Docker容器中

这个场景用Docker自定义网络的内置DNS+网络别名即可实现,完全不需要手动修改hosts文件:

  1. 首先创建自定义bridge网络(默认bridge网络不支持DNS服务发现,必须使用自定义网络)
    docker network create app-shared-net
    
  2. 启动目标服务(监听9000端口的服务)时,将其接入该网络,并给它添加host.docker.internal的网络别名:
    docker run -d \
      --name target-svc \
      --network app-shared-net \
      --network-alias host.docker.internal \
      你的目标服务镜像名
    
  3. 启动你的应用容器时,同样接入这个自定义网络即可:
    docker run -d \
      --name your-app \
      --network app-shared-net \
      你的应用镜像名
    

此时同网络内的所有容器解析host.docker.internal时,会由Docker内置DNS直接返回目标服务容器的当前IP,容器重启导致IP变动时,DNS记录会自动更新,无额外维护成本。

如果你用docker-compose部署,对应配置如下:

services:
  target-svc:
    image: 你的目标服务镜像名
    networks:
      app-shared-net:
        aliases:
          - host.docker.internal
  your-app:
    image: 你的应用镜像名
    networks:
      - app-shared-net

networks:
  app-shared-net:
    driver: bridge

场景2:9000端口的目标服务直接运行在宿主机上,不在容器内

这个场景不需要手动指定固定IP,Docker提供了特殊的host-gateway标识,会在容器启动时自动映射为宿主机在Docker网络中的网关IP,启动应用容器时添加对应add-host规则即可:

docker run -d \
  --name your-app \
  --add-host=host.docker.internal:host-gateway \
  你的应用镜像名

注意提前确认宿主机上的9000端口服务监听地址为0.0.0.0,不要只绑定127.0.0.1,否则容器内无法正常访问。

如果是docker-compose部署,对应配置如下:

services:
  your-app:
    image: 你的应用镜像名
    extra_hosts:
      - "host.docker.internal:host-gateway"

不要使用固定IP配置extra_hosts的方案,Docker容器的内部IP是动态分配的,重启、重建容器都会导致IP变化,固定配置必然会失效。

内容的提问来源于stack exchange,提问作者jjcasmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:24:35