bash - 打开终端时出错:未知。(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
(本地)运行时通过的任何建议?
解决方案
您在 Kubernetes pod/容器中运行 nano 有点奇怪。鉴于您kubectl exec ...
不是 root 登录 shell,解决方法是将值放入您的/root/.bashrc
:
出口期限=xterm
如果您要定期运行它,我建议您使用内置文件构建容器,因为如果不是这样,那么每次您的 pod/容器重新启动时,您都必须手动修改/.bashrd
内容。
推荐阅读
- mysql - 如何在 MySQL Query 中有条件地连接表
- openapi - Swagger(OpenAPI) 2.0 是否支持元组类型?
- python - 字符串对象在 python 代码中没有属性 get -error
- core-data - SwiftUI 读取已选择 UUID 的实体数据
- python - 如何将 python 类或模块导入谷歌 Colab?
- php - 验证选择下拉菜单。只有一个选项是正确的提交表格
- excel - 了解 VBA
- text-to-speech - Azure 自定义语音:“规范化文本为空”
- sql - Flutter 将列表映射到对象
- c# - 无法显示正确数量的小数