【问题标题】:kubectl attach: Unable to use a TTY - container es-node did not allocate onekubectl attach:无法使用 TTY - 容器 es-node 没有分配一个
【发布时间】:2017-02-14 14:49:12
【问题描述】:

我正在尝试附加到 Kubernetes 中正在运行的容器,但是我收到以下错误消息。

>kubectl attach -it es-client-2756725635-4rk43 -c es-node
Unable to use a TTY - container es-node did not allocate one
If you don't see a command prompt, try pressing enter.

如何在我的容器 yaml 中启用 TTY?

【问题讨论】:

  • 尝试了以下命令:kubectl attach wildfly-rc-uc79a -it 得到错误:无法使用 TTY - 容器 wildfly-rc-pod 没有分配一个 如果你没有看到命令提示符,尝试按回车键。
  • 尝试不使用-t 标志。见stackoverflow.com/a/61733197/658497

标签: containers kubernetes tty


【解决方案1】:

为了在附加时有正确的 TTY 和标准输入:

kubectl attach -it POD -c CONTAINER

容器必须配置tty: true和stdin: true。 默认情况下,这两个值都是false:https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#debugging

示例 Pod:

spec:
      containers:
      - name: web
        image: web:latest
        tty: true
        stdin: true

【讨论】:

  • 请注意,这是针对旧版本的 k8s v1.5 - 从那时起它可能已更改,但我没有时间检查。
【解决方案2】:

它失败的原因是因为你没有传递 bash 参数。这会在尝试创建 tty 连接时导致失败。

请尝试:

kubectl exec -it [POD-NAME] -c [CONTAINER-NAME] bash

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 这成功地在正在运行的容器内启动了一个交互式 shell,这非常有用(谢谢),但它没有回答使用附加的 OP 问题。另请注意,某些容器只有 sh(不是 bash)
【解决方案3】:

对于 Windows,MINGW64 (git bash) 似乎不起作用,但 PowerShell 可以!

kubectl exec -it abc-deployment-5d64659ff8-8tnnb -- /bin/bash
root@abc-deployment-5d64659ff8-8tnnb:/#

【讨论】:

    【解决方案4】:

    无论我做什么,它都不起作用,tty 命令将始终返回 not a tty 响应并退出非 0,即需要 tty 的任何内容都不会在我的终端上运行。

    我正在制作一个带有永久磁盘的临时工作站作为我的$HOME,Ubuntu Bionic Beaver 位于GKE。

    由于我在我的PD 中安装了brew,而$HOME 和brew 在我的$PATH 中,以下为我工作:

    brew install tmux
    tmux new -d -s <some arbitrary session name here> ### i.e.> tmux new -d -s tty
    tmux ls # Lists your sessions
    tmux a  # Attach to first available session
    

    然后在 tmux 内部:
    $ tty
    瞧
    /dev/pts/0

    我的 agnoster 是 b0rkz,但现在我可以做一些提示输入交互式密码的操作,即gcloud auth。

    PS:对于那些好奇的人,我将/etc/shadow、/etc/group、/etc/passwd 安装到/etc 和configmap

    【讨论】:

      【解决方案5】:

      你可以像这样添加一个 shell 容器。 那么你可以使用

      kubectl attach -it nginx -c shell
      
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        shareProcessNamespace: true
        containers:
        - name: nginx
          image: nginx
        - name: shell
          image: busybox
          stdin: true
          tty: true
      

      【讨论】:

        猜你喜欢
        • 2018-10-06
        • 2017-12-13
        • 2020-10-24
        • 2016-09-30
        • 2020-10-23
        • 2018-03-19
        • 2020-08-03
        • 2020-12-06
        • 1970-01-01
        相关资源
        最近更新 更多