如何在Docker容器上运行VI?


103

我已经在主机虚拟机上安装了docker。现在要使用创建文件vi

但这向我显示了一个错误:

bash: vi: command not found

1
vi可能未安装在容器内。您安装并运行了哪个容器?
侯赛因BABAL

1
您必须更具体。您是否要在容器中运行vi,如果是,容器基于哪个映像?很可能您没有安装vi。(apt-get install vim)
wpp

这取决于image您从中构建。很可能image您正在使用的软件如此轻巧,以至于它只包含您需要作为图像运行的内容。您需要手动安装所需的软件包。
魔术师

3
您可能不应该在容器内进行配置。而是在Dockerfile中执行。
Adrian Mouat

Answers:


150

使用以下命令登录到容器:

docker exec -it <container> bash

然后,运行以下命令。

apt-get update
apt-get install vim

11
如果在运行apt-get时遇到权限被拒绝的问题,则需要以root用户身份运行docker exec。“ docker exec -u root -it <容器> bash”。然后apt-get应该起作用。
java25

谢谢@arunprakashpj。唯一适用于从AWS存储库下载的图像的命令。
realPK '19

37

您的容器可能尚未开箱即可安装。

apt-get install vim在终端中运行,您应该已经准备就绪。


2
是的,但我更喜欢vim-tiny(Ubuntu)
Ben Whaley 2015年

3
在运行“ apt-get install vim”之前,您需要运行“ apt-get update”。
user1521213

2
首先apt-get updateTHENapt-get install vim
瑜伽Ghorecha

32

要运行的命令取决于您使用的基本映像。

对于Alpine,vi作为基本OS的一部分安装。安装vim将是:

apk -U add vim

对于Debian和Ubuntu:

apt-get update && apt-get install -y vim

对于CentOS,vi通常与基本OS一起安装。对于vim

yum install -y vim

这仅应在早期开发中完成。收到可用的容器后,应对存储在容器外部的映像或配置进行文件更改。更新您的Dockerfile及其用于生成新映像的其他文件。这当然不应该在生产中进行,因为容器内部的更改是短暂设计的,并且在更换容器时会丢失。


1
错误:无法锁定数据库:权限被拒绝
garg10may

1
@ garg10may命令需要以超级用户身份运行。USER root在Dockerfile中执行此操作,但请确保切换回您的其他用户。我正在运行的容器:docker exec -u root ...
BMitch,

21

用这个:

apt-get update && apt-get install -y vim

上面命令的说明

  1. apt-get update =>将更新当前软件包
  2. apt-get install =>将安装软件包
  3. -y =>将通过许可,默认许可将设置为是。
  4. vim =>您要安装的软件包的名称。

我尝试了但是遇到了这个错误bash: apt-get: command not found
Junaid

@Junaid检查apk add
Yogi Ghorecha

12

在您的Dockerfile中添加以下行,然后重建Docker映像。

RUN apt-get update && apt-get install -y vim

9

或者,通过不安装不必要的编辑器来使Docker映像变小。您可以通过ssh将文件从docker主机编辑到容器:

vim scp://remoteuser@container-ip//path/to/document

3
如果容器正在运行ssh,这不是唯一有效的方法吗?我起初以为这是一个绝妙的主意,但似乎无法使其发挥作用。
凯文

7

在基于Debian的容器中使用以下命令:

apt-get install vim-tiny

在Dockerfile中使用的完整说明:

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

它不会安装不必要的软件包,也不会删除不必要的下载文件,因此您的docker映像大小不会急剧增加。


3

要在Docker容器中安装,您可以运行命令

docker exec apt-get更新&& apt-get安装-y vim

但这仅限于安装了vim的容器。要使其对所有容器可用,请编辑Dockerfile并添加

运行apt-get更新&& apt-get安装-y vim

或者您也可以在新的Dockerfile中扩展映像并添加以上命令。例如。

FROM <图像名称>

运行apt-get更新&& apt-get安装-y vim


1

在容器内部(在docker中,不在VM中),默认情况下未安装。即使是apt-getwget也不起作用。我的VM在Ubuntu 17.10上运行。对我来说,yum package manaager工作了。

Yum不是debian或ubuntu的一部分。它是红帽的一部分。但是,它可以在Ubuntu中运行,并且默认情况下像apt-get一样安装

Tu install vim,使用此命令

yum install -y vim-enhanced 

卸载vim:

yum uninstall -y vim-enhanced 

同样,

yum install -y wget 
yum install -y sudo 

-y用于在执行yum install packagename后提示您提出任何问题时,假设是


0

如果您实际上想要一个小的编辑器来在Docker中进行简单的内务处理,请在Dockerfile中使用此编辑器:

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

我在基于Ubuntu 18的docker上使用了它。(当然,您可能需要一个RUN apt-get update,但如果要创建自己的Docker文件,则可能已经有了。)


0

如果您只需要更改一次文件。您应该更喜欢在本地进行更改,并使用此文件构建新的Docker映像。

在Docker映像中说,您需要在/ path / to / docker / image /下更改一个名为myFile.xml的文件。因此,您需要做。

  1. 将myFile.xml复制到本地文件系统中,然后进行必要的更改。
  2. 创建一个名为“ Dockerfile”的文件,其内容如下:
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

然后使用以下命令构建自己的Docker映像 docker build -t docker-repo:v-x.x.x .

然后使用您新构建的Docker映像。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.