(九)Docker 的网络通信

文章目录

    • 1、常用模式
    • 2、概念了解
      • [2.1、Docker 内容器的通信](#2.1、Docker 内容器的通信)
      • [2.2、宿主机和 Docker容器的通信](#2.2、宿主机和 Docker容器的通信)

1、常用模式

  • 直接使用 端口映射,宿主机:宿主机端口->容器 ip:容器端口
  • 端口映射+宿主机 hosts 映射,首先在宿主机 /etc/hosts文件中增加 宿主机 ip:容器 hostName,然后借助端口映射机制,实现宿主机 hostName->宿主机,Docker内部依靠 hostName,变向实现了宿主机网络和容器内网络的统一
  • 容器可以通过 host.docker.internal 访问到宿主机

2、概念了解

2.1、Docker 内容器的通信

在Docker中,当多个容器连接到同一个自定义网络时,它们可以通过以下两种方式相互通信:

  • IP地址通信:每个容器在自定义网络上都会被分配一个唯一的IP地址。你可以使用这个IP地址来让一个容器访问另一个容器的服务。例如,如果容器A的IP地址是172.18.0.2,那么你可以在容器B中通过这个IP地址来访问容器A。
  • 容器名称通信:更方便的是,你也可以直接使用容器的名称来访问其他容器。这是因为Docker会在自定义网络中为每个容器设置DNS条目,使得容器名称可以解析为该容器的IP地址。这样,你就可以在容器B中直接通过容器A的名称来访问它,而无需知道其具体的IP地址。

2.2、宿主机和 Docker容器的通信

容器外部(通常指的是宿主机或者不在同一网络桥接下的其他容器)默认情况下不能直接识别或通过IP或名称访问容器内的服务,除非满足以下条件之一:

  • 端口映射(Port Mapping):
    当你启动容器时,可以使用-p或--publish选项将容器内的端口映射到宿主机的端口。例如,如果你的容器监听在80端口,并且你想让它可以从宿主机外部访问,你可以这样做:

宿主机的8080端口的请求都会被转发到容器内的80端口

docker run -d -p 8080:80 <image-name>
  • 自定义网络(Custom Network):

    如果容器连接到了一个自定义网络,并且这个网络被配置成与宿主机网络或其他网络桥接,那么这些网络上的主机可能能够识别并访问容器的IP地址或名称。但是,这通常要求网络配置允许跨网络通信。

  • Host网络模式(Host Networking Mode):

    使用--network=host参数启动容器时,容器将使用宿主机的网络堆栈,这意味着容器的服务可以直接通过宿主机的IP地址和端口访问,但这通常不推荐用于生产环境,因为它破坏了容器的隔离性。

  • NAT路由:

    在某些情况下,宿主机上的NAT(Network Address Translation)规则可能会允许外部网络访问容器内的服务。这通常需要额外的网络配置。

相关推荐
漫无目的行走的月亮21 分钟前
在Docker中运行微服务注册中心Eureka
docker
大G哥3 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
大道归简3 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
zeruns8024 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站
爱跑步的程序员~4 小时前
Docker
docker·容器
福大大架构师每日一题4 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
程序那点事儿5 小时前
k8s 之动态创建pv失败(踩坑)
云原生·容器·kubernetes
疯狂的大狗5 小时前
docker进入正在运行的容器,exit后的比较
运维·docker·容器
长天一色5 小时前
【Docker从入门到进阶】01.介绍 & 02.基础使用
运维·docker·容器
伊玛目的门徒5 小时前
docker 搭建minimalist-web-notepad
运维·docker·notepad