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

相关推荐
一名路过的小码农1 小时前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
xiangshangdemayi4 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载
程序员JerrySUN4 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman
长囧鹿5 小时前
云原生之k8s服务管理
云原生·容器·kubernetes
gobeyye5 小时前
Docker 用法详解
运维·docker·容器
小灰灰__6 小时前
Linux离线安装Docker命令,简单镜像操作
linux·docker·eureka
怡雪~6 小时前
centos7.9搭建k8s集群
云原生·容器·kubernetes
雪碧聊技术7 小时前
Docker3:docker基础1
运维·docker·容器·docker常见命令
我要用代码向我喜欢的女孩表白9 小时前
k8s入门(不教部署,部署跟着文档来就行了)
云原生·容器·kubernetes
大虾别跑9 小时前
docker安装zabbix +grafana
docker·zabbix·grafana