什么是 Docker Compose 的 ports?
在 docker-compose.yml 文件中,ports 字段用于将容器内部的端口映射到宿主机上,使得外部可以通过宿主机访问容器中的服务。
基本语法
端口映射支持以下几种格式:
"3000":仅暴露容器端口(不映射到宿主机)"3000:3000":将宿主机 3000 端口映射到容器 3000 端口"127.0.0.1:8000:8000":仅绑定到本地回环地址"8000-8010:8000-8010":映射端口范围
配置示例
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
ports:
- "127.0.0.1:5432:5432"
上述配置将:
- Nginx 容器的 80 端口映射到宿主机的 8080 端口
- PostgreSQL 容器的 5432 端口仅对本机开放
注意事项
- 确保宿主机端口未被占用,否则容器启动会失败。
- 生产环境中建议限制绑定地址(如
127.0.0.1)以提高安全性。 - 使用
expose而非ports可仅在容器间通信时暴露端口。
常见问题
Q:ports 和 expose 有什么区别?
A:expose 仅在 Docker 内部网络中暴露端口,不会映射到宿主机;而 ports 会将端口发布到宿主机。