docker-compose port命令用于查询已启动服务的端口映射,不创建映射,仅显示宿主机实际绑定地址和端口;需服务运行且docker-compose.yml中明确配置ports,如docker-compose port web 80输出0.0.0.0:8080。

直接用 docker-compose port 就能查出某个服务实际映射到宿主机的端口,它不创建映射,只告诉你“现在连在哪”。关键点在于:必须服务已启动,且 ports 在 docker-compose.yml 里明确配置了(不是 host 网络模式)。
确认服务正在运行
执行前先确保 Compose 项目已启动:
-
docker-compose up -d启动服务(如果还没运行) -
docker-compose ps查看状态,确认目标服务显示为Up - 若服务是
Exit或Unhealthy,port命令会报错或无输出
基本用法:查单个服务的指定端口
语法是 docker-compose port ,例如:
-
docker-compose port web 80→ 输出类似0.0.0.0:8080,表示容器 80 端口映射到宿主机 8080 -
docker-compose port api 3000→ 输出127.0.0.1:3001,说明只限本地访问 - 如果容器端口没在
ports中声明,命令会返回空或提示“not published”
批量查看所有服务的映射端口
没有一键列出全部的内置命令,但可以用组合方式快速汇总:
- 查当前项目所有服务名和对应端口:
docker-compose config --services | xargs -I {} sh -c 'echo "=== {} ==="; docker-compose port {} 80 2>/dev/null || echo "no 80 exposed"' - 更通用的做法是先看
docker-compose ps的PORTS列,它直接显示映射关系,比如0.0.0.0:8000->8000/tcp - 若需结构化数据,可配合
docker-compose port+ 脚本循环各服务的常用端口(如 80、443、3000、5432)
常见问题与验证技巧
查到端口后不一定能立刻访问,建议顺手验证:
- 检查宿主机防火墙是否放行该端口(
ufw status或firewall-cmd --list-ports) - 从宿主机用
curl http://localhost:8080测试通不通 - 进容器确认服务监听的是
0.0.0.0:80,不是127.0.0.1:80(后者外部无法访问) - 如果用的是
:80这种自动分配写法,docker-compose port是唯一可靠方式查具体端口号











