博客
关于我
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/

你可能感兴趣的文章
node安装及配置之windows版
查看>>
Node实现小爬虫
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
Node提示:npm does not support Node.js v12.16.3
查看>>
Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
查看>>
Node服务在断开SSH后停止运行解决方案(创建守护进程)
查看>>
node模块化
查看>>
node模块的本质
查看>>
node环境下使用import引入外部文件出错
查看>>
node环境:Error listen EADDRINUSE :::3000
查看>>
Node的Web应用框架Express的简介与搭建HelloWorld
查看>>
Node第一天
查看>>
node编译程序内存溢出
查看>>
Node读取并输出txt文件内容
查看>>
node防xss攻击插件
查看>>
noi 1996 登山
查看>>
noi 7827 质数的和与积
查看>>
NOI-1.3-11-计算浮点数相除的余数
查看>>
NOI2010 海拔(平面图最大流)
查看>>
NOIp2005 过河
查看>>