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

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

在我的本地计算机上,我通过 ssh 连接到远程 VPS:。ssh [email protected]

在此 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

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

是否可以一步完成代替

ssh [email protected]
docker attach test

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

答案1

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

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

在容器中运行多个服务

容器的主要运行进程是Dockerfile 末尾的ENTRYPOINT和/或。CMD通常建议您使用以下方法分隔关注区域每个容器一项服务

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

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

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

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

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

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

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

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

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

相关内容