“docker run”实际上是否通过SSH连接到容器?

50次阅读
没有评论

问题描述

有用户提出了一个关于使用docker run命令的问题,他想知道当他运行命令docker run -it ubuntu bash时,是否实际上是通过SSH连接到容器,还是使用了其他协议。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解答

不,实际上并没有使用SSH连接到容器。Docker使用一种叫做”命名空间(namespaces)”的技术来提供被称为容器的隔离工作区。它并没有通过SSH协议来实现连接,而是通过Docker守护程序进行内部的”attach协议”。

详细解释

当你使用类似于docker run -it ubuntu bash这样的命令时,Docker会在一个隔离的环境中启动一个新的容器。这个隔离的环境就是通过命名空间实现的,它隔离了容器中的各种资源,如文件系统、进程、网络等。但是,容器与主机之间并没有通过SSH连接。

相反,Docker使用了一种内部的机制,即”attach协议”,来将你的终端连接到正在运行的容器。这个过程中,Docker守护程序充当了中间人,负责在主机和容器之间传输数据,而并没有涉及SSH协议。

替代方法

值得注意的是,在大多数情况下,如果你想在容器中运行交互式命令,使用docker run -it --rm ubuntu su -会比直接运行bash更好。因为这个命令模拟了一个完整的登录过程,会初始化一些环境变量,如TERM等。

综上所述,尽管类似于SSH连接的交互式会话是通过Docker的”attach协议”实现的,但并没有实际涉及SSH连接,而是通过Docker守护程序在主机和容器之间进行数据传输。

正文完