最常用可靠的方式是用多个 -p 参数映射端口,格式为宿主机端口:容器端口;支持端口范围批量映射如 8000-8003:8000-8003;推荐 docker-compose 统一管理多端口;需确保容器内服务监听 0.0.0.0:端口而非仅 localhost。

直接在 docker run 命令里加多个 -p 参数就能映射多个容器端口,这是最常用也最可靠的方式。
用多个 -p 参数一次指定
每个 -p 对应一组映射,格式是 宿主机端口:容器端口,顺序不重要,但不能重复绑定同一宿主机端口。
docker run -d -p 8080:80 -p 8443:443 -p 3306:3306 --name myapp nginx- 这会把容器的 80、443、3306 端口分别映射到宿主机的 8080、8443、3306 端口
- 如果宿主机 3306 已被占用,可换成其他空闲端口,比如
-p 3307:3306
用端口范围批量映射
当容器内有连续端口(如 8000–8003)需要映射时,可用范围写法减少重复参数。
docker run -d -p 8000-8003:8000-8003 myapp- 等价于写四个
-p:8000:8000、8001:8001、8002:8002、8003:8003 - 起始和结束端口数必须一致,否则报错
用 docker-compose 统一管理
适合多服务或多端口场景,配置清晰、易复用,推荐用于实际项目。
- 在
docker-compose.yml中写:
services:
web:
image: nginx
ports:
- "8080:80"
- "8443:443"
- "9000:9000"
- 运行
docker-compose up -d即可一次性启动并映射全部端口 - 修改配置后只需
docker-compose down && docker-compose up -d重载
注意容器内服务是否真正监听对应端口
端口映射只是“通道”,容器内应用必须主动监听目标端口,否则映射无效。
- 检查容器内进程:进入容器执行
netstat -tlnp | grep :80 - Nginx 默认监听 80,但某些镜像可能改了默认配置或监听地址(如只监听
127.0.0.1:80) - 确保应用绑定到
0.0.0.0:端口,而非仅localhost











