简介
隔离是容器的一项核心特性。默认情况下,容器的网络与主机系统分离。这意味着,即使容器内运行的 Web 服务器状态正常,如果你没有主动发布端口,外部仍然无法访问它。
端口映射可以解决这个问题。它会将主机上指定端口的流量转发到容器内指定的端口。这是容器网络的基础知识之一,因为它说明了隔离的服务如何变得可以访问。
如果不执行发布端口这一步,即使容器内的服务完全正常,它实际上仍然只对容器自己的网络命名空间可见。
在本实验中,你将练习以下操作:
- 运行 Nginx Web 服务器容器。
- 将主机的 8080 端口映射到容器的 80 端口。
- 验证端口映射并访问服务。
- 清理资源。
暴露容器端口
在此步骤中,你将使用 Nginx 镜像启动一个新的 Docker 容器。
Nginx 是一个 Web 服务器,默认在容器内监听 80 端口。但是,由于容器彼此隔离,80 端口不会自动从你的 LabEx 环境访问。为了解决这个问题,你需要将主机上的 8080 端口映射到容器内的 80 端口。
端口映射的语法是 -p <host_port>:<container_port>。
端口顺序很重要。左侧是客户端连接的主机端口,右侧是应用程序在容器内实际监听的端口。
在终端中运行以下命令:
docker run -d -p 8080:80 --name my-nginx nginx
命令说明:
docker run:创建并启动容器的命令。-d:以 detached 模式(后台模式)运行容器。-p 8080:80:端口映射标志。- 8080:主机上的端口(LabEx 环境)。
- 80:容器内的端口(Nginx 正在监听的端口)。
--name my-nginx:将容器命名为「my-nginx」。nginx:要使用的镜像。
如果操作成功,Docker 会输出较长的容器 ID。
此时,Docker 并没有修改 Nginx 本身,而是创建了一条网络规则,将发送到主机端口的请求转发到容器的服务端口。
检查端口配置
现在需要验证容器是否正在运行,以及端口映射是否配置正确。docker ps 命令会提供这些信息。
运行以下命令:
docker ps
你应该会看到类似下面的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123456789 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp my-nginx
理解输出内容:
仔细查看 PORTS 列:0.0.0.0:8080->80/tcp。
0.0.0.0:8080:表示主机正在所有网络接口上监听 8080 端口。->:表示转发方向。80/tcp:表示容器内的目标端口。
这确认了发送到本机 8080 端口的所有流量都会被转发到容器内的 80 端口。
正因为存在这条转发规则,端口映射通常也称为「发布」容器端口。你正在将原本隔离的服务公开给主机或外部客户端。
你也可以使用专门的命令,只检查端口信息:
docker port my-nginx
测试服务
端口映射完成后,现在测试 Web 服务器是否可以访问。由于你已经映射了主机的 8080 端口,因此可以向 localhost:8080 发送请求来访问 Nginx 服务器。
这里使用 curl,它是一个用于发送 Web 请求的命令行工具。
运行以下命令:
curl localhost:8080
预期结果:
你应该会看到 Nginx 默认欢迎页面的原始 HTML 代码。
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
<h1>Welcome to nginx!</h1>
...
</html>
如果看到这些 HTML 输出,说明操作成功!你的请求已经从主机(8080 端口)进入容器(80 端口),由 Nginx 处理,然后将响应发送回主机。
这个完整的往返过程证明了主机与容器之间的网络连接正常,而不仅仅是说明容器内的进程正在运行。
清理资源
在最后一步中,清理实验环境。对于不再需要的容器,及时停止并删除是一个好习惯,这样可以释放端口和系统资源。
首先,停止正在运行的容器:
docker stop my-nginx
接着,删除已停止的容器:
docker rm my-nginx
验证容器是否已经删除:
docker ps -a
列表中不应再出现 my-nginx 容器。
总结
在本实验中,你成功学习了 Docker 端口映射的基础知识。你完成了以下操作:
- 启动以 detached 模式运行的 Nginx 容器。
- 使用
-p标志,将主机的 8080 端口映射到容器的 80 端口。 - 使用
docker ps验证端口配置。 - 使用
curl从主机访问服务。 - 清理容器。
了解端口映射对于部署 Web 应用程序非常重要,因为它可以让外部流量访问运行在隔离容器内的服务。



