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

咨询host.docker.internal错误IP绑定位置及修正方法

问题描述

在服务器A上,我们通过Docker容器配置里的host.docker.internal实现同服务器内其他容器对该容器的访问。将整个Docker环境迁移到服务器B后,主机名host.docker.internal仍然指向服务器A的IP地址。尝试清理缓存、完全重装容器都没有效果,服务器B上的host.docker.internal依旧指向旧IP。

请问:host.docker.internal的IP与主机名绑定记录存放在哪里?如何将其更新为服务器B的正确IP地址?

相关配置文件

docker-compose.yaml

version: '3.2'
services:
  postgres:
    build:
      context: .
      dockerfile: ./docker_files/postgres.Dockerfile
    container_name: ${POSTGRES_CONTAINER_NAME}
    restart: always
    ports:
      - target: ${POSTGRES_TARGET_PORT} # 容器内部端口
        published: ${POSTGRES_PUBLISHED_PORT} # 外部暴露端口
        protocol: tcp # 端口协议(tcp或udp)
        mode: host
    extra_hosts:
      - "host.docker.internal:host-gateway"
    networks:
      - panter_docker_network
    volumes:
      - ${HOST_TRANSFER_DIRECTORY}:/tmp/host/
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
networks:
  panter_docker_network:
    driver: bridge

postgres.Dockerfile

FROM postgres:15.1
RUN set -eux; \
    apt-get update && apt-get install -y \
    vim \
    zip \
    procps \
    locales \
    lsb-release \
    libicu-dev \
    iproute2 \
    unzip \
    iputils-ping && \
    mkdir /tmp/host/

USER root
解答

绑定记录的存放位置

  1. 容器内部的/etc/hosts文件:你的docker-compose.yaml里配置了extra_hosts: "host.docker.internal:host-gateway",Docker在启动容器时会自动将这条映射写入容器的/etc/hosts,这是最直接的绑定记录位置。
  2. Docker守护进程(Docker daemon)缓存:部分网络配置可能被Docker daemon缓存,导致解析未及时更新。
  3. 宿主机DNS缓存:如果宿主机的DNS服务器缓存了host.docker.internal的旧IP,也可能影响容器内的解析结果。

更新为正确IP的步骤

  1. 检查容器内的/etc/hosts记录
    进入容器执行命令:

    docker exec -it ${POSTGRES_CONTAINER_NAME} cat /etc/hosts
    

    查看host.docker.internal对应的IP是否为服务器B的宿主机IP。如果不是,说明容器启动时未正确生成映射,需要排查Docker daemon或配置问题。

  2. 重启Docker守护进程
    Docker daemon可能缓存了旧的网络配置,执行以下命令重启(以Linux系统为例):

    sudo systemctl restart docker
    

    重启后重新启动容器:

    docker-compose down && docker-compose up -d
    
  3. 检查宿主机的/etc/hosts文件
    虽然你的配置用了host-gateway特殊值,但如果宿主机/etc/hosts里手动添加了host.docker.internal指向服务器A的IP,可能会干扰容器内的映射。打开宿主机/etc/hosts查看,如有相关记录直接删除。

  4. 强制重新构建镜像
    若镜像中存在残留的旧网络配置,执行以下命令强制重新构建(不使用缓存):

    docker-compose build --no-cache
    

    构建完成后重新启动容器。

  5. 检查容器DNS配置
    查看容器的DNS设置是否使用了外部DNS服务器导致解析异常:

    docker inspect ${POSTGRES_CONTAINER_NAME} | grep -A5 "DNS"
    

    如果配置了非默认的DNS服务器,建议修改为宿主机DNS或Docker内置DNS(默认是127.0.0.11)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:15:23