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

本文共 1192 字,大约阅读时间需要 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/

你可能感兴趣的文章
MySQL高级-视图
查看>>
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos配置中心集群原理及源码分析
查看>>
nacos配置自动刷新源码解析
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>
Navicat for MySQL 查看BLOB字段内容
查看>>
Neo4j电影关系图Cypher
查看>>
Neo4j的安装与使用
查看>>
Neo4j(2):环境搭建
查看>>
Neo私链
查看>>
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
netcat的端口转发功能的实现
查看>>
netfilter应用场景
查看>>