如何将 Docker 容器的自定义端口映射到主机

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 是一个广受欢迎的容器化平台,它允许你在一致且隔离的环境中打包和部署应用程序。Docker 的关键特性之一是能够将容器中的端口映射到主机上,从而使你能够从外部访问容器化应用程序。在本教程中,我们将探讨如何将 Docker 容器的自定义端口映射到主机,为你提供有效管理和访问基于 Docker 的应用程序所需的知识。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-410095{{"如何将 Docker 容器的自定义端口映射到主机"}} docker/create -.-> lab-410095{{"如何将 Docker 容器的自定义端口映射到主机"}} docker/port -.-> lab-410095{{"如何将 Docker 容器的自定义端口映射到主机"}} docker/info -.-> lab-410095{{"如何将 Docker 容器的自定义端口映射到主机"}} docker/version -.-> lab-410095{{"如何将 Docker 容器的自定义端口映射到主机"}} end

Docker 端口映射简介

Docker 是一个广受欢迎的容器化平台,它允许开发者将他们的应用程序及其依赖打包到称为容器的隔离环境中。Docker 的关键特性之一是能够将主机的端口映射到容器,从而实现容器与外部世界之间的通信。

当你运行一个 Docker 容器时,它通常在自己的内部网络上运行并监听特定的端口。要访问容器内运行的应用程序,你需要将容器的端口映射到主机上的一个端口。

端口映射对于各种用例都至关重要,例如:

  1. Web 应用程序:当你在 Docker 容器内运行一个 Web 服务器时,你需要将容器的端口(例如 80 或 8080)映射到主机上的一个端口,以便用户可以通过 Web 浏览器访问该应用程序。

  2. 数据库:当你在 Docker 容器内运行一个数据库服务器时,你需要将容器的端口(例如 MySQL 的 3306)映射到主机上的一个端口,以便其他应用程序可以连接到该数据库。

  3. 微服务:在微服务架构中,每个服务可能在其自己的 Docker 容器中运行。端口映射对于允许不同服务与外部世界之间的通信是必要的。

通过理解 Docker 端口映射的概念,你可以有效地管理容器化应用程序的网络连接,并确保它们可以从主机或其他网络客户端访问。

将自定义端口映射到 Docker 容器

要将主机上的自定义端口映射到 Docker 容器,可以在运行 docker run 命令时使用 -p--publish 标志。

基本语法如下:

docker run -p <主机端口>:<容器端口> <镜像名称>

以下是一个示例:

docker run -p 8080:80 nginx

在此示例中,主机上的端口 8080 被映射到 Nginx 容器内的端口 80。这意味着当你在主机上访问 http://localhost:8080 时,就能访问容器内运行的 Nginx Web 服务器。

你也可以通过多次指定 -p 标志来映射多个端口:

docker run -p 8080:80 -p 3306:3306 mysql

这会将主机的端口 8080 映射到容器的端口 80,并将主机的端口 3306 映射到容器的端口 3306

如果你想将主机上的随机可用端口映射到容器,可以使用以下语法:

docker run -p <容器端口> <镜像名称>

例如:

docker run -p 80 nginx

在这种情况下,Docker 会自动在主机上分配一个可用端口,并将其映射到容器的端口 80

你可以通过运行 docker ps 命令来验证端口映射,该命令会显示已映射的端口:

CONTAINER ID   IMAGE   COMMAND                  PORTS                 NAMES
abc123def456   nginx   "/docker-entrypoint.…"   0.0.0.0:8080->80/tcp   romantic_babbage

通过了解如何将自定义端口映射到 Docker 容器,你可以有效地将容器化应用程序暴露给外部世界,并实现容器与主机或其他网络客户端之间的通信。

实际用例与示例

运行 Web 服务器

假设你有一个在 Docker 容器中运行的 Web 应用程序,它在容器内部监听端口 80。为了能从主机访问该应用程序,你可以将容器的端口 80 映射到主机上的一个自定义端口,比如 8080

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

现在,你可以通过在主机上访问 http://localhost:8080 来访问该 Web 应用程序。

暴露数据库服务器

如果你有一个数据库服务器(例如 MySQL)在 Docker 容器中运行,你可以将容器的数据库端口(例如 3306)映射到主机上的一个自定义端口:

docker run -p 3306:3306 mysql

这将允许在主机上运行的其他应用程序使用主机的端口 3306 连接到容器内的 MySQL 数据库服务器。

映射多个端口

在更复杂的场景中,你可能有一个多层应用程序,其中不同组件(例如 Web 服务器、应用服务器、数据库)在单独的 Docker 容器中运行。你可以映射多个端口来暴露这些组件:

docker run -p 8080:80 -p 8000:8000 -p 3306:3306 my-app

这将把主机的端口 8080 映射到容器的端口 80(Web 服务器),主机的端口 8000 映射到容器的端口 8000(应用服务器),主机的端口 3306 映射到容器的端口 3306(数据库服务器)。

使用随机端口映射

如果你不想在主机上指定特定端口,可以让 Docker 自动分配一个可用端口:

docker run -p 80 my-web-app

在这种情况下,Docker 会将容器的端口 80 映射到主机上的一个可用端口。你可以使用 docker ps 命令查看分配的端口。

通过理解这些实际用例和示例,你可以有效地利用 Docker 的端口映射功能,将容器化的应用程序和服务暴露给外部世界,实现与应用程序的无缝通信和访问。

总结

在本教程中,你已经学会了如何将 Docker 容器的自定义端口映射到主机。通过理解端口映射的过程,你现在可以从主机访问容器化应用程序,从而更有效地与基于 Docker 的服务进行交互和管理。本指南中提供的实际用例和示例将帮助你将这些概念应用到自己基于 Docker 的项目和部署中。