(九)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)规则可能会允许外部网络访问容器内的服务。这通常需要额外的网络配置。

相关推荐
nathan05292 小时前
Kubernetes 实战练习指南
云原生·容器·kubernetes
janthinasnail2 小时前
使用Docker搭建MaxKB智能体平台
docker·maxkb
计算机小手3 小时前
高效 P2P 文件传输工具:FileSync 利用 WebRTC 技术实现极速安全传输
经验分享·docker·webrtc·开源软件
syty20204 小时前
K8s是什么
容器·kubernetes·dubbo
笨鸟贤妃4 小时前
Ubuntu 22.04 安装 Docker & Compose 最新最简单完整指南
ubuntu·docker·compose
感哥4 小时前
Docker存储
docker
灞波儿奔波儿灞4 小时前
Lucky STUN穿透结合群晖NAS实现docker下transmission监听端口动态更新
docker·群晖·stun·lucky
小毛驴8506 小时前
所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
git·docker·微服务
灵犀物润7 小时前
Kubernetes 配置检查与发布安全清单
安全·容器·kubernetes
感哥7 小时前
Docker网络
docker