在 Docker 中开放端口主要有以下几种方式:
在 Dockerfile 中使用 EXPOSE
指令声明要开放的端口:
FROM ubuntu:latest
EXPOSE 80/tcp
EXPOSE 443/tcp
注意:EXPOSE
只是声明容器会使用哪些端口,实际并不会自动映射到宿主机。
使用 -p
或 --publish
参数将容器端口映射到宿主机端口:
# 将容器80端口映射到宿主机8080端口
docker run -p 8080:80 nginx
# 映射多个端口
docker run -p 8080:80 -p 8443:443 nginx
# 让Docker自动选择宿主机端口(随机)
docker run -p 80 nginx
# 指定协议(TCP/UDP)
docker run -p 8080:80/tcp -p 53:53/udp myapp
在 docker-compose.yml 文件中配置端口映射:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
- "8443:443"
expose:
- "80"
# 查看容器端口映射情况
docker port <container_name_or_id>
# 查看容器详细信息(包括端口)
docker inspect <container_name_or_id>
-P
(大写) 参数,Docker 会将所有 EXPOSE
的端口随机映射到宿主机高端口需要更详细的帮助或有特定场景需求,可以告诉我具体情况。