最稳妥常用的方式是启动容器时用多个-p参数一次性映射多个端口,如docker run -d -p 8080:80 -p 3306:3306;运行中修改需停机、编辑配置文件并重启docker服务,易出错且不推荐。

直接在启动容器时用多个 -p 参数,是最稳妥、最常用的方式。运行中修改虽然可行,但需停机操作且容易出错,不建议作为常规手段。
启动容器时一次性映射多个端口
这是推荐做法,命令清晰、配置持久、无需重启 Docker 服务。每个 -p 对应一组映射关系:
docker run -d -p 8080:80 -p 3306:3306 -p 6379:6379 --name my-app nginx- 宿主机 8080 → 容器 80(Web)
- 宿主机 3306 → 容器 3306(MySQL)
- 宿主机 6379 → 容器 6379(Redis)
注意:宿主机端口不能重复占用,比如已有服务占用了 3306,再映射就会失败。
绑定到指定 IP 或限制访问范围
如果只想让某块网卡或本地访问生效,可以在 -p 中指定宿主机 IP:
-
-p 127.0.0.1:8080:80:仅本机可通过localhost:8080访问 -
-p 192.168.1.100:8000:80:只允许局域网该 IP 的请求到达容器
这样能提升安全性,避免服务意外暴露到公网。
查看和验证映射是否生效
容器启动后,快速确认端口是否按预期开放:
-
docker port—— 列出所有映射关系 -
docker ps—— 在 PORTS 列直观看到0.0.0.0:8080->80/tcp这类格式 - 用
curl http://localhost:8080或telnet localhost 3306测试连通性
运行中的容器追加端口映射(慎用)
不推荐,但若必须操作,需按顺序执行:
- 先
docker stop 容器名 - 查容器 ID:
docker inspect 容器名 | grep Id - 编辑
/var/lib/docker/containers/<id>/hostconfig.json</id>,在PortBindings中新增条目 - 同步更新
config.v2.json中的ExposedPorts - 重启 Docker 服务(
systemctl restart docker),再docker start 容器名
操作前务必备份配置文件,任意字段格式错误都会导致容器无法启动。











