在 Ubuntu docker 容器中找不到 Vi 或 Vim

Vi or Vim not found on Ubuntu docker container

我在 k8s 中有一个基于 Ubuntu 图像的 nginx-controller 容器 运行:

Image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0

容器内:

$ kubectl exec -it nginx-ingress-controller-xyz bash
$ uname -a
Linux nginx-ingress-controller-xyz 4.15.0-1111-azure #123~16.04.1-Ubuntu SMP Sat Mar 20 01:52:07 UTC 2021 x86_64 GNU/Linux

似乎 vivim 都不可用:

$ vi
bash: vi: command not found
$ vim
bash: vim: command not found

我以为 vi/vim 会一直在 linux 机器上?

在这种情况下,对我来说,这个方法总是有效的。 首先转到您的容器,然后使用这些命令:

apt update
apt install vim

apt update
apt install nano

vi 行为与 the POSIX specification 一致的命令对于 OS 自称为 Unix 是强制性的。

Ubuntu 和其他基于 Linux 的操作系统未经过认证,获得认证也不是一个目标,因此它们所做的只是像 want/need/can 一样严格遵守规范。因此,指望 vi“总是在 linux 机器上”或 Vim 提供 vi 命令是不合理的。根本无法保证。

此外,习惯上 Docker 通过删除尽可能多的杂物,使用于生产的图像尽可能轻量(和安全)。 运行 你的 Ingress Controller 不需要 vi,所以它不存在。

如果你的容器中有aptapt-get命令,就运行apt update && apt install vim,否则你可以尝试:
nsenter -t <Pid> -n -m vi <your-file> 在您的主机上重用这些工具,但更改名称空间。

您不会在 docker 图像中找到很多常用程序。因为这些图像是轻量级的。
您可以通过

在 ubuntu 图像上安装 vim
apt-get update && apt-get install vim