引用 ip 时的 host.docker.internal 与容器名称

Yon*_*Nir -1 docker docker-compose

在 docker-compose 文件中定义服务时,何时使用host.docker.internal主机的 ip,何时需要使用容器的名称?

Abd*_*UMI 7

所有可能的通信流程如下所示:

在此输入图像描述

(1):非容器化进程与容器通信

(2):容器与另一个容器通信

(3) : (1) 的相反方向


(1):容器必须将端口转发给主机,以便非容器化进程可以访问它

services:
   c1:
    ...
     ports:
       - hostport:containerport
Run Code Online (Sandbox Code Playgroud)

(2): 容器c1只使用服务名称(容器名称-c2)与c2通信

(3):容器c2必须使用主机( hostname -i)的私有IP。

对于(3),有几点:

  • Host 网络范围不能与 Docker 网络范围重叠,否则 Docker 路由器不会将请求抛出。

  • 主机不得启用阻止非容器化进程使用的端口的防火墙。

  • 如果您使用的是 Docker For Desktop,host.docker.internal则为主机私有 IP 的别名。那么你就不需要用 来计算主机的私有IP hostname -i