端口映射配置
容器默认使用独立网络,需端口映射才能从外部访问,下面介绍配置方法。
基本映射
-p 参数
Bash
# 映射容器 80 端口到宿主机随机端口
docker run -d -P nginx
# 查看映射端口
docker port my-nginx
# 输出
80/tcp -> 0.0.0.0:49153
指定宿主机端口
Bash
# 映射容器 80 端口到宿主机 8080 端口
docker run -d -p 8080:80 nginx
# 多个端口
docker run -d -p 8080:80 -p 8443:443 nginx
映射语法
Bash
-p [宿主机IP:]宿主机端口:容器端口[/协议]
完整示例
Bash
# 指定协议(tcp/udp)
docker run -d -p 8080:80/tcp nginx
# 绑定特定 IP
docker run -d -p 127.0.0.1:8080:80 nginx
# 绑定所有 IP(默认)
docker run -d -p 0.0.0.0:8080:80 nginx
# UDP 端口
docker run -d -p 53:53/udp dns-server
# 端口范围
docker run -d -p 8000-8010:80-90 nginx
常见场景
Web 服务
Bash
# Nginx
docker run -d -p 80:80 -p 443:443 nginx
# 避免端口冲突
docker run -d -p 8080:80 nginx # 宿主机 80 被占用时
数据库
Bash
# MySQL
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# PostgreSQL
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres:15
# 仅本地访问
docker run -d -p 127.0.0.1:3306:3306 mysql:8.0
Redis
Bash
# Redis(绑定本地 IP,防止外部访问)
docker run -d -p 127.0.0.1:6379:6379 redis:7
数据库和缓存服务建议绑定
127.0.0.1,避免暴露到公网。
查看端口映射
Bash
# 查看容器端口映射
docker port my-nginx
# 查看容器网络配置
docker inspect my-nginx | grep -A 10 "Ports"
# 输出示例
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
}
处理端口冲突
text
# 查看端口占用
sudo lsof -i :8080
sudo netstat -tlnp | grep 8080
# 停止占用进程或使用不同端口
docker run -d -p 8081:80 nginx
要点总结
-p 宿主机端口:容器端口映射端口,-P随机映射- 可绑定特定 IP:
-p 127.0.0.1:8080:80,增强安全性 - 支持 TCP/UDP 协议,端口范围和多个端口映射
- 数据库服务建议绑定
127.0.0.1防止外部访问 - 端口冲突时更换宿主机端口或停止占用进程
📝 发现内容有误?点击此处直接编辑