4.1 端口发布的基本概念
端口发布 是 Docker 中让容器内部运行的服务可从外部网络或主机访问的重要功能。这是多容器应用程序配置中的重要部分,因为它允许与服务进行交互,比如 Web 服务器、数据库和其他网络应用程序。在这节课中,我们将学习如何发布容器端口和配置服务的访问权限。
端口发布的基本概念
- 端口映射: 将主机端口和容器端口对应起来。
- 参数
-p/--publish: 在启动容器时用于指定端口映射。 - 参数
-P/--publish-all: 自动为容器的所有导出端口分配主机端口。
使用 -p 参数的示例
启动容器时,可以使用 -p 选项将主机端口映射到容器端口。命令格式如下:
docker run -d -p <host_port>:<container_port> <image>
示例 1: 发布 Nginx 的 Web 服务器端口
我们启动一个 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口。
现在可以通过这个地址访问 Nginx:http://localhost:8080。
docker run -d -p 8080:80 --name mynginx nginx
示例 2: 发布多个端口
你可以通过指定多个 -p 选项来发布多个端口。
在这个例子中,Nginx 可以通过 HTTP(8080端口)和 HTTPS(8443端口)访问。
docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx
使用 -P 参数的示例
参数 -P 会自动将 Dockerfile 或容器设置中指定的所有端口发布到随机主机端口。
示例:
docker run -d -P --name mynginx nginx
要查看分配了哪些端口,可以使用 docker port 命令:
docker port mynginx
输出结果会像这样:
80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769
4.2 在 Docker Compose 中发布端口
要在 Docker Compose 中指定端口,可以在文件 docker-compose.yml 中使用指令 ports 。
文件 docker-compose.yml 的示例
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
启动 Docker Compose:
docker compose up -d
现在可以通过 http://localhost:8080 和 https://localhost:8443 访问 Nginx。
4.3 发布端口的额外参数
1. 限制 IP 地址
你可以通过指定主机的 IP 地址来限制对容器端口的访问。
示例:
在这个示例中,Nginx 只能通过本地主机地址 http://127.0.0.1:8080 访问。
docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx
2. 使用端口范围
你可以指定一个端口范围进行发布。
示例:
docker run -d -p 8080-8081:80-81 --name mynginx nginx
实用建议:
- 仅发布必要的端口: 只发布访问服务真正需要的端口,以减少潜在的漏洞。
- 使用防火墙: 配置防火墙,限制对已发布端口的访问,仅允许可信的 IP 地址访问。
- 监控和日志记录: 使用监控和日志工具,跟踪对已发布端口的访问情况,并发现可疑活动。
GO TO FULL VERSION