跳到主要内容

Docker 端口映射

什么是Docker端口映射?

Docker端口映射是一种将容器内部的端口映射到主机端口的技术。通过端口映射,外部网络可以通过主机的IP地址和端口访问容器中运行的服务。这对于运行Web服务器、数据库等需要外部访问的服务非常有用。

为什么需要端口映射?

默认情况下,Docker容器是隔离的,外部网络无法直接访问容器内部的服务。通过端口映射,我们可以将容器的端口暴露给主机,从而允许外部网络通过主机的IP地址和端口访问容器中的服务。

如何使用Docker端口映射?

基本语法

在运行Docker容器时,可以使用 -p--publish 选项来指定端口映射。基本语法如下:

bash
docker run -p <主机端口>:<容器端口> <镜像名称>
  • <主机端口>:主机上用于访问容器的端口。
  • <容器端口>:容器内部服务监听的端口。

示例

假设我们有一个简单的Web服务器运行在容器内部的80端口上,我们希望将主机的8080端口映射到容器的80端口。可以使用以下命令:

bash
docker run -p 8080:80 nginx

在这个例子中,外部网络可以通过访问 http://localhost:8080 来访问容器中运行的Nginx服务器。

查看端口映射

要查看正在运行的容器的端口映射情况,可以使用 docker ps 命令:

bash
docker ps

输出示例:

plaintext
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
abc12345678 nginx "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp my-nginx

PORTS 列中,可以看到 0.0.0.0:8080->80/tcp,表示主机的8080端口映射到了容器的80端口。

实际应用场景

运行Web服务器

假设你正在开发一个Web应用,并且希望在本地测试时使用Docker容器来运行Web服务器。你可以使用端口映射将主机的8080端口映射到容器的80端口,从而通过 http://localhost:8080 访问Web应用。

bash
docker run -p 8080:80 my-web-app

运行数据库

如果你在容器中运行了一个数据库服务(如MySQL),并且希望从主机上的应用程序连接到该数据库,可以使用端口映射将主机的3306端口映射到容器的3306端口。

bash
docker run -p 3306:3306 mysql

这样,主机上的应用程序可以通过 localhost:3306 连接到容器中的MySQL数据库。

总结

Docker端口映射是一种将容器内部端口暴露给主机端口的技术,使得外部网络可以通过主机的IP地址和端口访问容器中的服务。通过 -p 选项,我们可以轻松地将主机的端口映射到容器的端口,从而实现外部访问。

附加资源

练习

  1. 使用 docker run 命令运行一个Nginx容器,并将主机的8080端口映射到容器的80端口。访问 http://localhost:8080 查看结果。
  2. 运行一个MySQL容器,并将主机的3306端口映射到容器的3306端口。尝试从主机上的MySQL客户端连接到容器中的MySQL数据库。
提示

在运行容器时,确保主机端口没有被其他服务占用,否则会导致端口冲突。