网站首页 > 博客文章 正文
技术背景
在使用Docker Compose编排容器时,ports 和 expose 是两个常用的配置选项,用于管理容器的端口映射和暴露。理解它们之间的区别,对于正确配置容器网络、确保服务的安全性和可用性至关重要。
实现步骤
ports的使用
ports 用于将容器的端口映射到宿主机的端口,使得容器内的服务可以从宿主机外部访问。在 docker-compose.yml 文件中,可以指定具体的宿主机端口和容器端口,或者只指定容器端口,让Docker自动分配宿主机端口。
示例 docker-compose.yml 文件:
mysql:
image: mysql:5.7
ports:
- "3306" # 只指定容器端口,随机分配宿主机端口
- "3307:3306" # 指定宿主机端口3307映射到容器端口3306
运行 docker-compose ps 后,会显示类似如下信息:
Name Command State Ports
-------------------------------------------------------------------------------------
mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32769->3306/tcp, 0.0.0.0:3307->3306/tcp
expose的使用
expose 用于声明容器打算暴露的端口,但并不将这些端口映射到宿主机上,这些端口只能被同一网络中的其他容器访问。
示例 docker-compose.yml 文件:
mysql:
image: mysql:5.7
expose:
- "3306"
运行 docker-compose ps 后,会显示类似如下信息:
Name Command State Ports
---------------------------------------------------------------
mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp
核心代码
以下是一个完整的 docker-compose.yml 文件示例,展示了 ports 和 expose 的使用:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80" # 将宿主机的8080端口映射到容器的80端口
depends_on:
- mysql
mysql:
image: mysql:5.7
expose:
- "3306" # 声明容器暴露3306端口,仅供内部网络访问
environment:
MYSQL_ROOT_PASSWORD: example
最佳实践
- 使用 ports 时:
- 明确指定宿主机端口和容器端口的映射关系,避免随机端口带来的管理困难。
- 确保宿主机的防火墙允许外部访问指定的端口。
- 使用 expose 时:
- 将其作为一种文档和安全机制,明确声明容器内部服务使用的端口。
- 结合Docker网络,确保同一网络中的容器可以相互访问。
常见问题
1. ports是否会覆盖防火墙设置?
ports 本身不会覆盖防火墙设置。如果要从外部访问容器内的服务,需要确保宿主机的防火墙允许相应的端口访问。
2. 使用 docker-compose run时,端口配置是否生效?
默认情况下,docker-compose run 会忽略 docker-compose.yml 中的端口定义。可以使用 docker-compose up 或者提供 --service-ports 参数来使端口配置生效。
3. expose是否有实际的网络影响?
在现代Docker版本中,EXPOSE 指令通常只作为一种元数据和文档信息,对网络没有实际影响。要实现容器间的通信,主要依赖于Docker网络配置。
猜你喜欢
- 2025-05-22 Docker搭建MySQL与Redis集群教程
- 2025-05-22 Docker新手福音!这个开源控制面板让你更快上手Docker
- 2025-05-22 数字管家登场:利用Docker快速部署你的HomeBox家庭库存系统
- 2025-05-22 docker-compose备份数据库,在crontab定时任务中不生效解决方法
- 2025-05-22 容器云生产实践第一步:ELK Stack
- 2025-05-22 docker-compose快速部署elasticsearch-8.x集群+kibana
- 2025-05-22 dify 1.40
- 2025-05-22 Windows 上 Docker 镜像与容器更新全攻略
- 2025-05-22 docker从入门到实战系列6-docker-compose容器编排
- 2025-05-22 Docker与Docker Compose部署微服务对比
你 发表评论:
欢迎- 377℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 373℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 357℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 352℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 351℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 350℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)