什么是ref="/tag/2019/" style="color:#EB6E00;font-weight:bold;">Docker镜像端口映射
当你在本地运行一个Web应用,比如用Python Flask搭了个小网站,默认情况下只能本机访问。但你想让别人也能通过浏览器打开它,就得靠端口映射来“开门”。在Docker里,镜像本身是静态的,真正跑起来的是容器,而端口映射就是把宿主机的一个端口“转发”到容器内部的服务端口上。
举个例子:你在容器里启动了一个Nginx服务,监听80端口。如果不做端口映射,外界根本访问不到这个80端口。通过映射,你可以把宿主机的8080端口指向容器的80端口,这样别人访问你电脑的8080端口时,实际就访问到了容器里的网页。
怎么设置端口映射
使用 docker run 命令时,加上 -p 参数就能完成映射。格式是:宿主机端口:容器端口。
docker run -d -p 8080:80 nginx这条命令会启动一个Nginx容器,并把本机的8080端口映射到容器的80端口。现在打开浏览器访问 http://localhost:8080,就能看到Nginx的欢迎页了。
如果只想让本机访问,可以指定IP绑定:
docker run -d -p 127.0.0.1:8080:80 nginx这样只有本机才能访问8080端口,增加了安全性。
查看当前端口映射情况
有时候你忘了某个容器映射了什么端口,可以用 docker ps 查看:
docker ps输出中有一列叫 PORTS,会显示类似 0.0.0.0:8080->80/tcp 的信息,说明宿主机8080指向容器80端口。
多个服务怎么处理端口冲突
一台机器上跑多个Web服务很常见。比如你同时想跑两个Nginx容器,都映射80端口肯定不行,会提示端口被占用。解决办法是换宿主机端口:
docker run -d -p 8080:80 --name web1 nginx
docker run -d -p 8081:80 --name web2 nginx这样两个容器都能正常运行,分别通过8080和8081访问。
Docker Compose中的端口映射
如果你用 docker-compose.yml 管理服务,端口映射写在配置文件里更方便:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"启动后效果和命令行一样,但配置更清晰,适合多人协作或复杂项目。
端口映射不是万能钥匙,别随便开大范围端口。比如把宿主机的22端口映射出去,等于暴露SSH服务,容易被扫描攻击。建议只开必要的端口,生产环境尽量绑定内网IP或加防火墙规则。