博客
关于我
docker-compose ports 与 expose 的区别
阅读量:660 次
发布时间:2019-03-15

本文共 1187 字,大约阅读时间需要 3 分钟。

Docker Compose中的Port Binding与Port Exposure:区别与用法解析

在Docker Compose中配置容器端口暴露,通常会使用两种方式:ports(端口绑定)和expose(端口暴露)。虽然两者在功能上都能使容器端口服务性外部访问,但各自的用法和用途存在显著差异。本文将从基础到深度细解这两种方式的区别及适用场景。

1. Port(端口绑定)

Port(常用大写的-P标记)是最常见的在Docker Compose中绑定和映射端口的方式。使用Port tag时,容器内部的某个端口会被自动映射到主机系统的随机端口,范围通常在49000到49900之间。这一机制确保每个容器获得独特且随机的主机端口,避免端口冲突。

使用方式包括:

  • "8000:80":将容器内的80端口绑定到主机的8000端口。
  • "9000:8080":将容器内的8080端口映射到主机的9000端口。
  • "443":将容器内的443端口绑定到主机任意端口,系统会随机分配。

值得注意的是,无论主机端口是否被明确定义,只要使用Port标记,端口都会被暴露给主机系统。这种方法在提供灵活性和便利性方面具有优势,特别适用于需要标准化端口配置的场景。

2. Expose(端口暴露)

Exposed ports(用小写的-p标记或expose指令)则完全不同于Port,它的主要目标不是将容器端口暴露给主机,而是仅允许其他与该容器关联的服务(通过链接)访问。这种暴露方式只有在容器之间建立链接关系时才生效,且它不会将端口暴露给外部主机。

关键特点包括:

  • 仅限于服务链接:exposed ports只供与当前容器链接的服务使用,无法从外部访问。
  • 主机端口不受影响:在expose模式下,主机不会开放任何端口,容器仍需自己配置防火墙规则以允许特定服务访问。

使用方式示例:

version: '3.8'services:  webapp:    image: training/webapp    expose:       - "3000"      - "8000"

这样配置后,只有与该webapp容器建立了链接的其他服务才能通过3000和8000端口与其通信。

知道这些区别后,选择适合的就是关键

  • 选择Port(-P或-P):如果目标是让外部主机访问容器服务,Port是最直接有效的选择。
  • 选择Exposure(-p或expose):仅需要同一网络中的其他服务访问内部服务时,Exposure提供了更精确的控制。
  • 组合使用:在复杂架构中,可能需要同时使用两种方式,但请注意,expose仅在服务链接时生效,主机端口仍需借助Port标记。

通过合理选择这两种方案,可以最大限度地满足Docker Compose应用中关于端口配置的需求。希望本文的内容能为您提供清晰的参考和帮助。

转载地址:http://jktmz.baihongyu.com/

你可能感兴趣的文章
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
npm,yarn,cnpm 的区别
查看>>
NPOI
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI初级教程
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>
NPOI在Excel中插入图片
查看>>
NPOI将某个程序段耗时插入Excel
查看>>
NPOI格式设置
查看>>
NPOI设置单元格格式
查看>>
Npp删除选中行的Macro录制方式
查看>>
NR,NF,FNR
查看>>
nrf24l01+arduino
查看>>
nrf开发笔记一开发软件
查看>>
nrm —— 快速切换 NPM 源 (附带测速功能)
查看>>
nrm报错 [ERR_INVALID_ARG_TYPE]
查看>>
NS3 IP首部校验和
查看>>
NSDateFormatter的替代方法
查看>>
NSError 的使用方法
查看>>
NSGA-Ⅲ源代码
查看>>