端口映射是Docker容器与宿主机之间网络通信的重要机制,允许外部访问容器内的服务。以下是Docker端口映射的几种实现方式:
docker run -p [宿主机端口]:[容器端口] [镜像名称]
示例:
# 将宿主机的8080端口映射到容器的80端口
docker run -p 8080:80 nginx
# 将宿主机的随机端口映射到容器的80端口
docker run -p 80 nginx
# 映射多个端口
docker run -p 8080:80 -p 443:443 nginx
# 只绑定到特定IP
docker run -p 192.168.1.100:8080:80 nginx
# 绑定到所有IPv4地址
docker run -p 0.0.0.0:8080:80 nginx
在docker-compose.yml
文件中:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
- "8443:443"
# 或者使用长格式语法
ports:
- target: 80
published: 8080
protocol: tcp
mode: host
# 查看容器端口映射情况
docker port [容器名称或ID]
# 查看详细容器信息
docker inspect [容器名称或ID] | grep -i port
协议指定:默认是TCP,也可以指定UDP
docker run -p 8080:80/udp nginx
范围映射:映射一系列端口
docker run -p 8000-8010:8000-8010 myapp
问题:端口映射后无法访问服务
- 检查容器内服务是否正常运行(docker logs
)
- 检查防火墙设置
- 确认映射的端口是否正确
问题:端口已被占用
- 更换宿主机端口
- 停止占用端口的服务
- 使用netstat -tulnp | grep [端口]
查找占用进程
通过合理使用端口映射,可以实现容器服务的灵活访问控制和安全隔离。