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

标签 ssh docker

你能告诉我安装 openssh-server 和使用给定的 docker 容器启动 ssh session 和运行 docker run -t -i ubuntu/bin/bash 然后执行之间的区别是什么一些操作。 docker attach 与这两种方法相比如何?

最佳答案

不同点 1. 如果你想使用ssh,你需要在Docker镜像上安装ssh并运行在你的容器上。由于额外的负载或从安全角度考虑,您可能不想这样做。一种方法是让您的图像尽可能小 - 避免像 heartbleed 之类的错误 ;)。是否需要 ssh 是一个讨论点,但主要是个人品味。我会说只用它来调试,而不是真正改变你的形象。如果你需要后者,你最好制作一个新的更好的图像。就个人而言,我还没有在 Docker 镜像上安装我的第一个 ssh 服务器。

差异 2. 使用 ssh,您可以按照 CMD 和 Dockerfile 中的 ENTRYPOINT 指定的方式启动容器。然后,Ssh 允许您检查该容器并针对您可能需要的任何用例运行命令。另一方面,如果您使用 bash 命令启动容器,您实际上会覆盖 Dockerfile CMD。如果您随后想要测试该 CMD,您仍然可以手动运行它(可能作为后台进程)。在调试我的图像时,我一直这样做。这是从发展的角度来看。

区别 3. 2nd 的扩展,但从不同的角度来看。在生产中,ssh 将始终允许您检查正在运行的容器。 Docker 在这方面还有其他有用的选项,例如 docker cpdocker logsdocker attach

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

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

关于ssh - 连接到正在运行的 docker 容器 - 使用 ssh 和运行带有 "-t -i"参数的命令之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716211/

相关文章:

security - 如何记录SSH Secure Shell客户端的所有即将到来的消息?

node.js - 在 Docker 容器内调试 webpack-dev-server 应用程序

ubuntu - Docker - 使用 IP 浏览 Docker 容器

bash - Linux - Bash 登录到机器然后成为 root

Heroku -> GitHub SSH key 问题

即使存在于 ssh-agent 中,Git 也会要求提供 SSH 密码

linux - Git为每次推送输入长密码

docker - 如何使用 dockerfile 在 gcp 应用引擎上安装 poppler?

docker - 如何以最少的停机时间在 docker-compose 容器中重新加载环境变量?

php - 在构建 Docker 时,如何将 Composer 缓存存储在卷中?