【问题标题】:how to ssh docker container如何ssh docker容器
【发布时间】: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 证书

标签: docker ssh


【解决方案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
        

        【讨论】:

        【解决方案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
          

          【讨论】:

            猜你喜欢
            • 2015-09-19
            • 2016-09-08
            • 2018-05-07
            • 1970-01-01
            • 2017-01-22
            • 2021-08-19
            • 1970-01-01
            • 1970-01-01
            • 2020-10-19
            相关资源
            最近更新 更多