SSH直接连接到docker容器,无需先ssh主机

Bas*_*asj 3 ssh sftp terminal container docker

在我的本地计算机上,我通过 ssh 连接到远程 VPS:ssh user@1.2.3.4

在此 VPS 中,正在运行 docker 容器(例如docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04docker run -itd --name test nvidia/cuda:11.4.0-devel-ubuntu18.04 ...

Local computer -> VPS (1.2.3.4) -> Docker container
Run Code Online (Sandbox Code Playgroud)

通过 SSH 直接从我的本地计算机连接到此容器并直接获得 bash 提示符的标准方法是什么?

是否可以一步完成而不是

ssh user@1.2.3.4
docker attach test
Run Code Online (Sandbox Code Playgroud)

以同样的方式,我想从本地计算机使用 SFTP(例如使用 Filezilla)连接 Docker 容器。

Phi*_*ing 5

Docker 不是虚拟机1,并且没有标准方法可以直接从远程计算机连接容器。事实上,docker 积极阻止这种行为。

\n

要执行您所要求的操作,需要您在容器内运行 SSH 服务器以及它应该包含的任何应用程序。Docker 建议您不要这样做:

\n
\n

在容器中运行多个服务

\n

一个container\xe2\x80\x99s的主要运行进程是Dockerfile末尾的ENTRYPOINTand/or 。CMD通常建议您通过每个容器使用一项服务来分隔关注区域来分隔关注区域。

\n
\n

您还应该尝试将容器视为一次性的。也就是说,docker container rm ...永远不应该破坏任何无法用docker run .... 如果您尝试手动编辑或上传到容器(而不是卷),那么您很可能会关心容器是否被破坏。

\n

以不同的方式思考问题...

\n

我相信您想要实现的目标是轻松地将文件上传/下载到您的nvidia/cuda容器中。有两种方法可以实现这一目标...

\n

1 - 使用绑定安装,并将 ssh / scp 直接连接到您的主机

\n

绑定安装将导致主机和容器之间共享目录。您可以非常简单地通过 ssh 进入主机并浏览主机上的这些文件。主机上的所有文件将与容器中的文件相同(不是副本)。因此,您所做的任何更改都会立即在容器中看到。

\n

2 - 使用两个具有共享卷或绑定安装的容器

\n

如果您想将 SSH 实例与主机实例隔离,您可以使用第二个容器运行 SSH 服务器(例如:此映像),其绑定安装或 docker 卷与您的主机相同nvidia/cuda

\n

SSH 客户端在卷中更改的任何文件都将被您的主“nvidia/cuda”容器看到,因为它们是相同的文件,而不是副本。

\n

执行此操作时的常见模式是将一个卷安装到/data两个容器中。这样你就知道/data在一个容器中与/data一个容器中的内容与另一个容器中的内容

\n