使用 -p 参数可直接实现端口映射,将宿主机端口转发至容器端口;支持固定映射(如 -p 8080:80)、ip 限制(如 -p 127.0.0.1:8080:80)和随机映射(-p);需排查端口占用、防火墙及容器内服务监听状态。

直接用 -p 参数就能完成端口映射,核心就是告诉 Docker “把宿主机的哪个端口,转发给容器里的哪个端口”。不需要额外配置网络或改代码,一条命令就生效。
基础写法:固定端口映射
最常用也最推荐的方式,适合前后端、数据库等明确需要对外访问的服务:
-
docker run -d -p 8080:80 nginx→ 宿主机 8080 端口 → 容器内 80 端口 -
docker run -d -p 3306:3306 mysql:8.0→ 直接映射 MySQL 默认端口(注意宿主机 3306 是否空闲) - 多个端口就重复加
-p:-p 8080:80 -p 8443:443 -p 9000:9000
限制访问范围:绑定特定 IP
增强安全性,比如只允许本机或内网访问:
-
docker run -d -p 127.0.0.1:8080:80 nginx→ 只有宿主机自己能通过localhost:8080访问 -
docker run -d -p 192.168.1.100:8080:80 nginx→ 仅局域网中该 IP 对应的机器可访问
快速测试用:随机端口映射
适合开发调试、CI/CD 或临时跑服务,Docker 自动选一个空闲端口:
-
docker run -d -P nginx(大写 P)→ 自动映射容器EXPOSE的所有端口 - 查实际映射了哪个端口:
docker port,比如输出80/tcp -> 0.0.0.0:32771
常见问题处理
启动失败或访问不了?先确认这几件事:
- 宿主机端口是否被占用(如 Nginx、Apache、其他容器正在用 80 或 8080)
- 云服务器要检查安全组/防火墙是否放行对应端口(不只是 Docker 配置)
- 容器内服务是否真在监听目标端口(例如 Nginx 默认监听 80,Spring Boot 默认 8080)
- 映射后访问地址是
http://宿主机IP:宿主机端口,不是容器内地址











