创建与远程应用程序和容器的加密连接
若需在本地客户端计算机与远程计算机上运行的应用程序之间建立加密连接,可使用 SSH 隧道技术。某些应用程序在传输信息时不添加加密。要通过 Internet 使用加密方式访问此类应用程序,请使用 SSH 隧道技术,也称为 SSH 端口转发。这样做可在本地客户端计算机与远程应用程序(如容器会话)之间建立加密连接。如果远程主机或本地计算机受到防火墙保护,则必须使用 SSH 隧道。
SSH 隧道
本指南将向您展示如何将客户端计算机上的端口转发至远程计算机上的端口。例如,若在本地客户端机器的端口 5903 与远程机器的端口 5902 之间建立端口转发机制,则所有连接到 localhost:5903 的请求都会自动转发至 remotehost:5902,其中 localhost 和 remotehost 分别代表本地与远程机器的名称或 IP 地址。因此,若在远程机器上配置端口 5902 以允许访问容器会话,则可直接从 localhost:5903 访问该容器会话。设置 SSH 隧道后,客户端端口与容器会话之间的所有通信均经过加密处理。
在 Windows 客户端上使用 PuTTY
若您使用 PuTTY 连接远程机器,请通过 PuTTY 配置对话框添加新的端口转发规则。在类别下,选择 Connection > SSH > Tunnels。

要通过 VNC 连接,请从本地机器的端口到远程实例的端口建立隧道,该远程实例连接到容器端口 5901(默认 VNC 端口)。
在“源端口”字段中,输入本地客户端机器上以
5900开头的可用端口,例如5903。在目标字段中,输入您执行
docker run命令时连接到容器端口5901的相关主机端口,例如localhost:5902,然后点击Add。请注意,您必须使用localhost,而非主机名称。这是因为目标字段将localhost解释为目标计算机的名称。
若需通过 Web 浏览器连接,请在本地机器上设置从本机端口到远程实例端口的隧道,该远程实例端口需连接至容器端口 6080(默认非 VNC 端口)。
在“源端口”字段中,输入客户端机器上一个空闲端口,例如
6082。在目标字段中,输入您执行
docker run命令时连接到容器端口6080的相关主机端口,例如localhost:6081,然后点击Add。请注意,您必须使用localhost,而非主机实例的名称。这是因为目标字段将localhost解释为目标计算机的名称。
若您使用多个容器或在客户端机器上运行 VNC 服务器,必须逐步增加客户端机器的源端口直至找到可用端口,例如 5905 或 6085。
使用命令行界面
若需通过命令行界面从主机端口建立 SSH 隧道至连接容器端口的远程实例,请在本地终端使用如下形式的命令:
ssh -L clientport:localhost:hostport ubuntu@MyRemoteMachine
clientport 是客户端机器上的一个空闲端口,例如 5903 或 6082。hostport 是远程实例上的主机端口,当您执行 docker run 命令时将其连接到容器端口,例如 5902 或 6081。请注意,您必须使用 localhost,而非主机实例的名称。这是因为该命令将 localhost 解释为主机名称。
例如,使用以下命令:
ssh -L 5903:localhost:5902 ubuntu@MyCompanyDGX1
若在客户端机器上运行 VNC 服务器,必须递增客户端端口直至在本地机器找到可用端口,例如 5905 或 6085。
连接到容器桌面
要从本地机器连接到容器桌面,您必须确保在执行 docker run 时已启动 VNC 服务器,并将容器端口映射到远程 Docker® 主机实例上的端口,例如:
docker run -it --rm -p 5902:5901 -p 6081:6080 --shm-size=512M mathworks/matlab:r2021a -vnc
-vnc 启动 VNC 服务器,标志 -p 将远程实例上的 Docker 主机端口 5902 和 6081 分别映射到容器端口 5901 和 6080。有关运行 MATLAB® 容器和使用这些标志的更多信息,请参阅 Docker Hub 上的 MATLAB 容器。在本地客户端计算机上设置好从本地到远程 Docker 主机实例的 SSH 隧道后,若要通过本地计算机的 Web 浏览器进行连接,请使用以下 URL:
http://localhost:6082
请注意,您必须使用 localhost,而非主机实例的名称。
若在建立隧道时增加了客户端端口,请使用相应的客户端端口号,例如 6085。
在本地客户端机器上设置好从本地到远程 Docker 主机实例的 SSH 隧道后,若要在本地机器上通过 VNC 连接,请使用您的 VNC 客户端连接到客户端的相应显示端口,例如:示例:
localhost:1
请注意,您必须使用 localhost,而非主机实例的名称。
若在建立隧道时增加了客户端端口,请使用对应的客户端显示端口号,例如端口 5905 对应的客户端显示端口号为 5。