博客
关于我
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报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm的常用配置项---npm工作笔记004
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
npm编译报错You may need an additional loader to handle the result of these loaders
查看>>
npm配置安装最新淘宝镜像,旧镜像会errror
查看>>
npm错误 gyp错误 vs版本不对 msvs_version不兼容
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>
NPOI在Excel中插入图片
查看>>
NPOI格式设置
查看>>
Npp删除选中行的Macro录制方式
查看>>
NR,NF,FNR
查看>>
nrf开发笔记一开发软件
查看>>
NS3 IP首部校验和
查看>>
NSDateFormatter的替代方法
查看>>
NSError 的使用方法
查看>>
nsis 安装脚本示例(转)
查看>>
NSJSON的用法(oc系统自带的解析方法)
查看>>
nslookup 的基本知识与命令详解
查看>>