什么是端口映射?
在使用 Docker Compose 时,为了让外部网络能够访问容器内的服务(如 Web 服务器、数据库等),需要将容器内部的端口映射到宿主机的端口上。
这是通过 ports 字段在 docker-compose.yml 文件中完成的。
基本语法
在 docker-compose.yml 中,使用如下格式:
services:
web:
image: nginx
ports:
- "8080:80"
上述配置表示:将宿主机的 8080 端口映射到容器的 80 端口。
ports 与 expose 的区别
- ports:将容器端口发布到宿主机,允许外部访问。
- expose:仅在容器之间或内部暴露端口,不对外公开(常用于服务间通信)。
services:
db:
image: postgres
expose:
- "5432"
常见用法示例
1. 映射多个端口
ports:
- "3000:3000"
- "8080:80"
2. 仅指定容器端口(随机分配宿主机端口)
ports:
- "80"
此时可通过 docker-compose port web 80 查看实际映射的端口。
3. 指定协议(TCP/UDP)
ports:
- "1234:1234/udp"
注意事项
- 确保宿主机端口未被占用,否则启动会失败。
- 生产环境中建议明确指定端口,避免随机分配带来的不确定性。
- 使用
127.0.0.1:8080:80可限制仅本地访问。