不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2024-01-14 11:11:26  修改时间:2024-02-23 14:34:28  分类:Docker/K8s  编辑

一、问题描述

使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。

二、解决方案

适用于 Windows 和 Mac 的 Docker Desktop 18.03+ 支持 host.docker.internal 作为 localhost 的功能别名。在您的容器中使用此字符串来访问您的主机。注意,这里区分实体的办法

指定通信个体 别名
解释成容器 localhost或127.0.0.1
解释成主机 host.docker.internal

比如,您在主机上运行 MySQL 服务器,Docker 容器可以通过网络访问连接到主机的mysql 具体名为host.docker.internal:3306 。当您在 Windows 或 Mac 计算机上工作时,这是最简单的技术。

Linux 上的 Docker 引擎用户也可以通过 docker run 的 --add-host 标志启用主机的默认名称 host.docker.internal。使用此标志启动容器以公开主机字符串:     

展例:

docker run -d --add-host host.docker.internal:host-gateway -p 80:80 -p 443:443 dzq:latest

使用(连接宿主机数据库):

host.docker.internal:3306 

 --add-host 标志向容器的 /etc/hosts 文件添加一个条目。上面显示的值将 host.docker.internal 映射到容器的主机网关,这与真实的 localhost 值相匹配。如果您愿意,可以用您的主机真实名称替换 host.docker.internal 。

 

 

参考:

  1. Docker从容器中项目如何访问到宿主机MYSQL