首页 > 解决方案 > 打开终端时出错:未知。(kubectl exec pod -it bash)

问题描述

使用标准 GNOME 终端使用 Ubuntu 19.10。

我已经使用以下 dockerfile 使用nvm构建了一个 docker映像(它将是一个 npm 诊断/调试命令行容器,因此不是应用程序):

FROM ubuntu:19.10

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update && \
    apt-get -y dist-upgrade && \
    apt-get -y autoremove && \
    apt-get clean

RUN apt-get install -y \
    curl \
    nano \
    git 

ARG NODE_VERSION='12.0.0'
ARG NVM_DIR=/root
ARG NVM_VERSION='v0.35.3'

RUN curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION

我已经构建了一个图像并将其推送到图像注册表并在 k8s 中启动它。我已经访问了正在运行的容器:

kubectl exec my-app-xx25 -it bash

但是当在容器内时,我无法启动,例如nano

root@my-app-xx25:/# nano
Error opening terminal: unknown.

或为此重置终端:

root@my-app-xx25:/# reset
reset: unknown terminal type unknown

vi/vim虽然有效。

基于:

https://github.com/moby/moby/issues/9299

如果我做:

kubectl exec my-app-xx25 -it -- bash -c "export TERM=xterm && bash"

我可以很好地启动 nano,但似乎是一个混乱的解决方法。

请注意,如果我使用 docker 在本地运行它,它可以正常工作(启动 nano、reset 等):

docker run -it my-image /bin/bash

关于发生了什么以及为什么我需要export TERM=xterm在运行时而kubectl exec不是在docker run(本地)运行时通过的任何建议?

标签: bashdockerkubernetes

解决方案


您在 Kubernetes pod/容器中运行 nano 有点奇怪。鉴于您kubectl exec ...不是 root 登录 shell,解决方法是将值放入您的/root/.bashrc:

出口期限=xterm

如果您要定期运行它,我建议您使用内置文件构建容器,因为如果不是这样,那么每次您的 pod/容器重新启动时,您都必须手动修改/.bashrd内容。


推荐阅读