如何ssh docker容器
Posted
技术标签:
【中文标题】如何ssh docker容器【英文标题】:how to ssh docker container 【发布时间】:2017-06-22 01:08:19 【问题描述】:我正在运行容器 hypriot/rpi-busybox-httpd
我正在尝试 ssh 到 docker 容器:但它给出了错误:
pi@raspberrypi:~ $ docker exec -it cc55da85b915 bash
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"
pi@raspberrypi:~ $ docker exec -it cc55da85b915 sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH"
我马上就做吗?
【问题讨论】:
如果您指定bash
、例如 docker exec -it cc55da85b915 /bin/bash
(或/usr/local/bin/bash
,或bash
在该图像中的任何位置)的完整路径会发生什么?
@Castaglia 这可能应该是一个公认的答案:)
@Castaglia @ZathrusWriter 我试过$ docker exec -it baa50167dd75 /bin/bash
,但我仍然收到此错误rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory"
好的,这就是进步。从rpi-busybox-httpd 存储库中,您的映像看起来是使用dockerize 构建的,它仅 安装运行所需的文件。在这种情况下,我怀疑您将无法在该映像上执行任何类型的 shell。
好吧,我怀疑,经过大量故障排除后,我尝试了:docker exec -it baa50167dd75 /bin/bash
,现在我得到了这个错误。 could not read CA certificate "/home/pi/.docker/ca.pem": open /home/pi/.docker/ca.pem: no such file or directory
这意味着我需要 docker 的 CA 证书。在我的树莓派上,.docker
文件夹不存在,但在我的 Mac 上却是,所以我不知道从哪里可以为我的 pi 上的 docker 获取 CA 证书
【参考方案1】:
您可能需要指定bash
的完整路径,例如:
docker exec -it cc55da85b915 /bin/bash
或/usr/local/bin/bash
,或该图像中 bash 所在的任何位置。
希望这会有所帮助!
【讨论】:
【参考方案2】:可能是您的图像没有安装二进制 /bin/bash(如前所述),我遇到了同样的问题,我能够使用 /bin/sh 进入容器
docker exec -ti cc55da85b915 /bin/sh
另一种解决方法是直接执行命令而不访问任何 shell。
docker exec -ti cc55da85b915 ls /etc
【讨论】:
它对我有用!你能告诉我们 -ti 参数的用途是什么吗? @FernandoFradegrada "-t" 用于 "tty",基本上它告诉 docker 分配一个终端会话来执行命令。 "-i" 是交互式的,docker 会一直监听标准输入(键盘),让用户引入更多命令。这是官方文档的链接:docs.docker.com/engine/reference/commandline/exec/#description 工作就像一个魅力!谢谢!! 我想补充一点,当bash
不起作用时,同样的事情也适用于kubectl
命令。【参考方案3】:
你有很多不同的方法可以做到这一点,你可以使用 docker 的 attach 命令来附加。
$ sudo docker attach cc55da85b915 #by ID
或者你可以使用 docker exec 命令:
$ sudo docker exec -i -t cc55da85b915 /bin/bash
如果/bin/bash
失败,您可以使用在更多容器中工作的/bin/sh
:
$ sudo docker exec -i -t cc55da85b915 /bin/sh
【讨论】:
【参考方案4】:您使用的图像似乎没有安装二进制 /bin/bash,但它应该有 /bin/sh
试试:
docker exec -it cc55da85b915 sh
【讨论】:
【参考方案5】:对于基于 Alpine 的映像, docker exec -ti cc55da85b915 /bin/sh 和 docker exec -ti cc55da85b915 ls /etc 有效。正如“Esteban Collado”所建议的那样。
但是对于我使用的其他 Linux 版本, docker exec -ti cc55da85b915 bash
【讨论】:
如果您不添加太多新信息,这可能不需要作为答案【参考方案6】:如果您仍在寻找答案。这在 Windows 上对我有用。
winpty docker exec -it <containerid> sh
【讨论】:
winpty
是什么?
请阅读这里***.com/questions/48199794/winpty-and-git-bash【参考方案7】:
试试下面的命令:
docker exec -it cc55da85b915 /bin/busybox sh
要列出所有可用的命令,请使用:
docker exec -it cc55da85b915 /bin/busybox --list
【讨论】:
【参考方案8】:这也与 Kubernetes pod 相关。
例如,如果您尝试连接到不包含您指定的 shell 的 pod:
kubectl exec -it some-busybox-pod bash
(busybox 上面有sh
而不是bash
)。
你最终会遇到同样的错误:
OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
command terminated with exit code 126
【讨论】:
以上是关于如何ssh docker容器的主要内容,如果未能解决你的问题,请参考以下文章