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

相关推荐
Bruce-li__2 小时前
创建私人阿里云docker镜像仓库
阿里云·docker·云计算
碣石潇湘无限路2 小时前
【云原生】Kubernetes CEL 速查表
容器·贪心算法·kubernetes
mingyuewu4 小时前
MAC安装docker 后提示com.docker.vmnetd”将对您的电脑造成伤害
macos·docker·容器
小小寂寞的城4 小时前
Ubuntu里安装Jenkins
ubuntu·ci/cd·docker·jenkins
Architect_Lee7 小时前
阿里云服务器安装docker以及mysql数据库
阿里云·docker·云计算
geek_super8 小时前
Docker学习--容器的root文件系统(rootfs)命令--docker cp 命令
docker
专注代码七年8 小时前
Docker运维篇
运维·docker·容器
一杯敬朝阳 一杯敬月光9 小时前
WIN11 企业版 部署Dify+Docker
运维·docker·容器
Leo Han9 小时前
k8s常用命令(持续更新中)
docker·容器·kubernetes
KubeSphere 云原生9 小时前
云原生周刊:Kubernetes v1.33 要来了
云原生·容器·kubernetes