在我的本地计算机上,我通过 ssh 连接到远程 VPS:。ssh [email protected]
在此 VPS 中,正在运行 docker 容器(例如docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04
和docker 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