Docker端口映射外网访问:小白也能懂:用Docker端口

前置准备


开始 Docker端口映射外网访问 之前,请先确认你手头有以下条件:



  • 一台已安装 Docker 的云服务器(推荐 CentOS 7+ 或 Ubuntu 20.04+)

  • 服务器拥有 公网 IP(弹性公网 IP 或固定公网 IP 都可以)

  • 知道你的服务监听的 内部端口(比如 Nginx 默认 80,MySQL 默认 3306)

  • 云平台安全组或服务器防火墙已开放你想映射的 外部端口(见下文避坑指南)

  • 能够在服务器上执行 docker psdocker run 命令(建议用 root 用户或 sudo)


还没装 Docker?执行 curl -fsSL https://get.docker.com | bash 然后 systemctl start docker 即可快速安装。

分步操作


第一步:确认容器内部端口


先拉一个测试镜像并运行,例如 Nginx:


docker run -d --name my-nginx nginx

查看容器状态:


docker ps

你会看到类似 0.0.0.0:80->80/tcp 的信息?

不,默认并没有对外映射端口。

记住容器内部端口(Nginx 是 80)。


第二步:执行端口映射启动容器


关键命令使用 -p 参数,格式为 主机端口:容器端口


docker run -d --name my-web -p 8080:80 nginx

解释:-p 8080:80 表示将宿主机的 8080 端口映射到容器的 80 端口。

外网用户访问 http://你的公网IP:8080 就能看到 Nginx 默认页面。


如果你想映射多个端口,可以用多个 -p


docker run -d --name my-app -p 8080:80 -p 8443:443 my-image

第三步:对于已运行容器的端口映射


如果想给已经运行的容器添加新的端口映射,推荐用下面两种方法(二选一):



  • 方法A:重新创建容器(最简单)


  docker stop my-web
docker rm my-web
docker run -d --name my-web -p 8080:80 -p 9090:9090 nginx


  • 方法B:提交为新镜像再运行(不推荐新手,略复杂,可跳过)


避坑指南


常见错误1:宿主机端口被占用


执行 netstat -tulpn | grep :8080 查看端口是否被其他进程监听。

如果被占用,换一个端口,比如 -p 8081:80


常见错误2:云平台安全组未放行


这是最多新手忽略的地方。

请登录你的云服务商控制台(阿里云、腾讯云、华为云等),找到 安全组防火墙,添加入站规则:



  • 协议:TCP

  • 端口:你映射的外部端口(如 8080)

  • 来源:0.0.0.0/0(允许所有外网访问)


一定记得同时检查服务器内部防火墙(如 iptables / firewalld):


firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

常见错误3:Docker容器内服务绑定到127.0.0.1


如果容器内的服务(如 MySQL)配置只监听 localhost,即使做了端口映射也无法从外网访问。

检查容器内服务的绑定地址,确保是 0.0.0.0


效果验证


验证步骤



  1. 查看容器运行状态:


   docker ps | grep my-web

应该显示端口映射如 0.0.0.0:8080->80/tcp



  1. 在服务器本机测试:


   curl http://localhost:8080

应返回 Nginx 欢迎页 HTML。



  1. 从另一台机器或手机浏览器访问:


   http://你的服务器公网IP:8080

如果看到 Nginx 默认页面,Docker端口映射外网访问 就成功了。


高频问题解答


Q1:为什么外网访问超时?

最常见原因是 安全组/防火墙 没有开放外部端口。检查云平台入站规则和服务器防火墙。


Q2:容器重启后端口映射会失效吗?

不会,只要你使用相同的 docker run -p 命令启动(或者容器自动重启 --restart=always),映射规则会保留。


Q3:如何让外网访问 MySQL 容器?

类似:docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql。但注意生产环境不建议直接暴露 3306 到公网,建议使用 VPN 或 SSH 隧道。


Q4:一个宿主机可以映射多个相同外部端口吗?

不行,每个外部端口只能被一个容器使用。如果多个容器需要同一个内部端口(如 80),请映射不同外部端口,比如 8080, 8081。


如果你正在处理 Docker端口映射外网访问,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
Linux日志排查故障的完整步骤,零基础也能上手
下一篇
服务器远程连接Xshell:手把手教你用Xshell远程连接
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意