连接到正在运行的docker容器 – 使用ssh和运行带“-t -i”参数的命令之间的区别

你能不能指出我安装openssh服务器和启动ssh会话与给定的docker容器和运行docker run -t -i ubuntu /bin/bash之间的区别,然后执行一些操作。 docker attach如何与这两种方法相比较?

区别1.如果你想使用ssh,你需要在Docker镜像上安装ssh并运行在你的容器上。 您可能不希望因为额外负载或从安全angular度。 一种方法是保持你的图像尽可能小 – 避免像heartbleed的错误;)。 无论你想要ssh是一个讨论点,但大多是个人的品味。 我只会说,只用于debugging,而不是实际上改变你的形象。 如果你需要后者,你最好创造一个新的,更好的形象。 就我个人而言,我还没有在Docker镜像上安装我的第一台ssh服务器。

区别2.使用ssh,你可以按照CMD的指定启动你的容器,也可以在你的Dockerfile中使用ENTRYPOINT。 然后Ssh允许你检查那个容器,并运行你需要的任何用例的命令。 另一方面,如果使用bash命令启动容器,则可以有效地覆盖Dockerfile CMD。 如果你想testingCMD,你仍然可以手动运行它(可能作为后台进程)。 debugging我的图像时,我一直这样做。 这是从发展的angular度来看的。

区别3.第二个延伸,但从不同的angular度。 在生产中,ssh将始终允许您检出正在运行的容器。 在这方面,Docker有其他的select,比如docker cpdocker logsdocker attach

根据文档“attach命令将允许您查看或与正在运行的任何容器交互,分离(-d)或交互式(-i)。您可以同时附加到同一个容器 – 屏幕共享样式,或快速查看你的守护进程的进展。“ 不过,我在实际上以有用的方式使用它时遇到了麻烦。 也许有人使用它可以详细说明呢?

这是唯一的本质区别。 图像层,提交或类似的东西没有区别。