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

相关推荐
再ZzZ1 小时前
Docker快速部署Kafka(内网通用版本)
docker·容器·kafka
Stack Overflow?Tan902 小时前
linux ubuntu22.04安装ROS2humble完整版的流程
linux·docker·ros2
正经教主6 小时前
安全养虾:[windows]Docker部署OpenClaw详细过程记录
安全·docker·容器
程序员 沐阳6 小时前
Docker 命令完全指南:从入门到实战
docker·容器·eureka
繁星星繁6 小时前
Docker(一)
java·c语言·数据结构·c++·docker·容器·eureka
xin_yao_xin6 小时前
Linux 下 Docker 安装教程(2026)
linux·运维·docker
Riu_Peter6 小时前
【技术】Docker 释放空间
运维·docker·容器
杨浦老苏6 小时前
可视化Docker Compose构建器VCompose
运维·docker·开发·可视化·群晖
爱学习的程序媛6 小时前
【Day2】WSL2+Docker配置全攻略
运维·docker·容器·wls2
me8327 小时前
【Linux】解决Docker-Compose拉取Jenkins时失败问题。
linux·docker·jenkins