发布和开放端口

解释

如果您到目前为止一直遵循这些指南,您就会了解容器为应用程序的每个组件提供隔离的进程。每个组件(React 前端、Python API 和 Postgres 数据库)都在自己的沙盒环境中运行,与主机上的其他所有内容完全隔离。这种隔离对于安全性和管理依赖项非常有用,但这也意味着您无法直接访问它们。例如,您无法在浏览器中访问 Web 应用程序。

这就是 port publishing 的用武之地。

发布端口

发布端口提供了通过设置转发规则来突破一点网络隔离的能力。例如,您可以指示应将主机端口上的请求转发到容器的 port 。在容器创建期间使用带有 (或 ) 的标志发布端口。语法为:808080-p--publishdocker run

$ docker run -d -p HOST_PORT:CONTAINER_PORT nginx
  • HOST_PORT:主机上要接收流量的端口号
  • CONTAINER_PORT:容器中侦听连接的端口号

例如,要将容器的 port 发布到 host port :808080

$ docker run -d -p 8080:80 nginx

现在,发送到主机上的 port 的任何流量都将转发到容器内的 port。808080

重要

发布端口后,默认情况下会将其发布到所有网络接口。这意味着到达您计算机的任何流量都可以访问已发布的应用程序。请注意发布数据库或任何敏感信息。在此处了解有关已发布端口的更多信息

发布到临时端口

有时,您可能只想发布端口,但不关心使用哪个主机端口。在这些情况下,您可以让 Docker 为您选择端口。为此,只需省略 configuration 即可。HOST_PORT

例如,以下命令会将容器的端口发布到主机上的临时端口上:80

$ docker run -p 80 nginx

容器运行后,using 将显示您选择的端口:docker ps

docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
a527355c9c53   nginx         "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    0.0.0.0:54772->80/tcp    romantic_williamson

在此示例中,应用程序在主机上的 port 处公开。54772

发布所有端口

创建容器镜像时,该指令用于指示打包的应用程序将使用指定的端口。默认情况下,不会发布这些端口。EXPOSE

使用 or 标志,您可以自动将所有公开的端口发布到临时端口。当您试图避免开发或测试环境中的端口冲突时,这非常有用。-P--publish-all

例如,以下命令将发布镜像配置的所有公开端口:

$ docker run -P nginx

试用

在本实践指南中,您将学习如何使用 CLI 和 Docker Compose 发布容器端口来部署 Web 应用程序。

使用 Docker CLI

在此步骤中,您将运行容器并使用 Docker CLI 发布其端口。

  1. 下载并安装Docker 桌面。

  2. 在终端中,执行以下命令启动新的容器。

    $ docker run -d -p 8080:80 docker/welcome-to-docker
    

    第一个 API 是指主机端口。这是本地计算机上的端口,将用于访问容器内运行的应用程序。第二个是指集装箱港口。这是容器内的应用程序侦听传入连接的端口。因此,该命令将主机的 port 绑定到容器系统上的 port。808080808080

  3. 转到 Docker Desktop 仪表板的 Containers 视图,验证已发布的端口。

    显示已发布端口的 Docker Desktop Dashboard 的屏幕截图
  4. 通过选择容器的 Port(s) 列中的链接或在浏览器中访问 http://localhost:8080 来打开网站。

    在容器中运行的 Nginx Web 服务器的登录页面的屏幕截图

使用 Docker Compose

此示例将使用 Docker Compose 启动相同的应用程序:

  1. 创建一个新目录,然后在该目录中创建一个包含以下内容的文件:compose.yaml

    services:
      app:
        image: docker/welcome-to-docker
        ports:
          - 8080:80

    该配置接受几种不同形式的 port 定义语法。在本例中,您使用的是命令中使用的相同名称。portsHOST_PORT:CONTAINER_PORTdocker run

  2. 打开终端并导航到您在上一步中创建的目录。

  3. 使用命令启动应用程序。docker compose up

  4. 打开浏览器以 http://localhost:8080

其他资源

如果您想更深入地了解此主题,请务必查看以下资源:

后续步骤

现在,您已经了解了如何发布和开放端口,您可以学习如何使用该命令覆盖容器默认值。docker run