当前位置:首页 > 系统教程 > 正文

跨平台Docker容器访问宿主机服务(Windows/Linux/Mac IP配置全攻略)

本文摘要:在进行容器化开发时,如何从容器内部访问宿主机的数据库或API是一个高频难题。本文将针对不同操作系统,详细讲解 Docker访问宿主机、Docker容器网络配置、host.docker.internal 以及 跨平台Docker教程 等核心知识点。

在使用 Docker 过程中,初学者常犯的错误是直接在容器里写 localhost。由于容器拥有独立的网络命名空间,localhost 指向的是容器本身。要连接宿主机的服务,我们需要根据平台采取不同的策略。

跨平台Docker容器访问宿主机服务(Windows/Linux/Mac IP配置全攻略) Docker访问宿主机  Docker容器网络配置 host.docker.internal 跨平台Docker教程 第1张

一、Windows 和 Mac 环境:官方特权地址

对于在 Windows 或 Mac 上使用 Docker Desktop 的用户,Docker 官方提供了一个非常简单的伪域名,无需手动查 IP 即可访问宿主机。

  • 访问地址: host.docker.internal
  • 使用场景: 例如宿主机运行着 MySQL(3306),在容器连接配置中直接填写 host.docker.internal:3306 即可。

二、Linux 环境:进阶手动配置

在 Linux 原生环境下,默认不支持上述域名,我们需要通过以下两种方式之一来实现 Docker容器网络配置

方法 1:使用 Docker 20.10+ 的新特性

在启动容器时添加 --add-host 参数,可以将 host.docker.internal 映射到宿主机的网桥网关上:

docker run -d --name my-app --add-host=host.docker.internal:host-gateway my-image

方法 2:直接使用网桥 IP 地址

在 Linux 中,Docker 默认会创建一个名为 docker0 的虚拟网卡,其 IP 通常是宿主机的固定内网地址:

# 在宿主机执行命令查看 IPip addr show docker0 | grep inet

通常该 IP 为 172.17.0.1,容器内直接访问该地址即可直达宿主机。

三、重要注意事项(小白必看)

即使配置了正确的 IP,如果依然无法访问,请检查以下两点:

  1. 宿主机服务监听范围: 确保你的宿主机服务(如 Redis/MySQL)不是只监听在 127.0.0.1,需要修改为 0.0.0.0 或容器网段地址。
  2. 防火墙设置: 宿主机防火墙(ufw、firewalld 或 Windows 防火墙)可能会拦截来自 Docker 网段的流量,建议尝试关闭防火墙或添加放行规则。

通过本篇 跨平台Docker教程,相信你已经掌握了如何在不同环境下轻松实现容器访问宿主机的技巧!