如何在docker容器上运行vi?

时间:2015-07-20 11:55:06

标签: linux docker vi

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

但它给我一个错误:

bash: vi: command not found

13 个答案:

答案 0 :(得分:50)

使用以下命令登录容器:

docker exec -it <container> bash

然后,运行以下命令。

apt-get update
apt-get install vim

答案 1 :(得分:30)

你的容器可能没有开箱即用。

在终端中运行apt-get install vim,您应该准备好了。

答案 2 :(得分:10)

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

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

apk -U add vim

对于Debian和Ubuntu:

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

对于CentOS,vi通常与基本操作系统一起安装。对于vim

yum install -y vim

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

答案 3 :(得分: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映像大小不会显着增加。

答案 4 :(得分:6)

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

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

答案 5 :(得分:4)

或者,通过不安装不必要的编辑器来保持您的泊坞窗图像小。您可以通过ssh编辑从docker主机到容器的文件:

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

答案 6 :(得分:4)

错误:: bash: vi: command not found

以 root 用户身份登录容器运行以下命令--

docker exec --user="root" -it (container ID) /bin/bash
apt-get update
apt-get install vim

答案 7 :(得分:2)

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

  

docker exec apt-get update&amp;&amp; apt-get install -y vim

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

  

运行apt-get update&amp;&amp; apt-get install -y vim

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

  

FROM&lt;图像名称&gt;

     

运行apt-get update&amp;&amp; apt-get install -y vim

答案 8 :(得分:2)

使用此:

writeFile: async resource => {
    try {
      let fullPath = "file://" + RNFS.DocumentDirectoryPath + "/" + uuid() + resource.filename
      let moveFile = await RNFS.moveFile(resource.path, fullPath);
      let documentDirectory = await RNFS.readDir(RNFS.DocumentDirectoryPath);
      let storedFile;
      let splitCurrentFileName = fullPath.split("/");
      let currentFileName = splitCurrentFileName[splitCurrentFileName.length - 1];
      let savedFile = documentDirectory.map(file => {
        let splitFileName = file.path.split("/");
        let filename = splitFileName[splitFileName.length - 1];
        if (filename == currentFileName) {
          storedFile = file.path;
        }
      });
      return storedFile;
    } catch (e) {
      console.log(e);
    }
  },

上述命令的说明

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

答案 9 :(得分:0)

内部容器(在docker中,不在VM中),默认情况下未安装。 甚至 apt-get wget 也将不起作用。我的VM在Ubuntu 17.10上运行。对我来说, yum 软件包管理器起作用了。

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

一样安装

Tu install vim,使用此命令

yum install -y vim-enhanced 

要卸载

yum install -y vim-enhanced 

类似地,

yum install -y wget 
yum install -y sudo 

-y表示在执行 yum install packagename

后提示您提出任何问题,则为是

答案 10 :(得分:0)

尝试将属性添加到容器内的server.properties文件时遇到相同的问题,我的解决方案是:

public class CACHED_DATA
{
    public AppStructMahkeme _db;
    public List<DAVALAR> DavaLarToProcess { get; set; } = new List<DAVALAR>();

    public List<KAZALAR> KazaList = new List<KAZALAR>();
    public List<DAVA_TURLERI> DavaTurList = new List<DAVA_TURLERI>();
    public List<DAVA_SCALE> DavaScaleList = new List<DAVA_SCALE>();
    public List<STATUSES> StatusList = new List<STATUSES>();
    public List<DAVA_KONULARI> DavakonuList = new List<DAVA_KONULARI>();
    public List<AVUKATLAR> AvukatList = new List<AVUKATLAR>();
    public List<EVRAK_TYPES> EvrakTypeList = new List<EVRAK_TYPES>();
    public List<SENDERS> SendersList = new List<SENDERS>();
    public List<ICRA_STATUS> IcraStatusList = new List<ICRA_STATUS>();
    public List<DAVALAR> DavaList = new List<DAVALAR>();
    public List<ISTIDA_TURLERI> IstidaTurList = new List<ISTIDA_TURLERI>();
    public List<ISTIDALAR> IstidaList = new List<ISTIDALAR>();
    public async Task FillAll()
    {

        _db = new AppStructMahkeme();
        DavaLarToProcess = new List<DAVALAR>();
        //_db.Configuration.LazyLoadingEnabled = false;
        //KazaList = null;
        KazaList = await _db.KAZALAR.ToListAsync();
        DavaTurList = await _db.DAVA_TURLERI.ToListAsync();
        DavaScaleList = await _db.DAVA_SCALE.ToListAsync();
        StatusList = await _db.STATUSES.ToListAsync();
        AvukatList = await _db.AVUKATLAR.ToListAsync();
        EvrakTypeList = await _db.EVRAK_TYPES.ToListAsync();
        SendersList = await _db.SENDERS.ToListAsync();
        IcraStatusList = await _db.ICRA_STATUS.ToListAsync();
        DavakonuList = await _db.DAVA_KONULARI.ToListAsync();
        DavaList = await _db.DAVALAR.ToListAsync();
        IstidaTurList = await _db.ISTIDA_TURLERI.ToListAsync();
        IstidaList = await _db.ISTIDALAR.ToListAsync();
    }





    public async Task ProcessTasks()
    {
        if(DavaLarToProcess.Count!=0)
             _db.DAVALAR.AddRange(DavaLarToProcess);

        Trace.WriteLine("saving");
        await _db.SaveChangesAsync();
        Trace.WriteLine("saved");



        _db.Dispose();

        DavaLarToProcess = null;
        KazaList = null;
        DavaTurList = null;
        DavaScaleList = null;
        StatusList = null;
        AvukatList = null;
        EvrakTypeList = null;
        SendersList = null;
        IcraStatusList = null;
        DavakonuList = null;
        DavaList = null;
        IstidaTurList = null;
        IstidaList = null;
    }
}

这会将pinkUnicorn添加到文件末尾。

p.s .:我知道这是一个特殊的情况,但可以节省一些时间。

答案 11 :(得分:0)

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

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

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

答案 12 :(得分: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 build -t docker-repo:v-x.x.x .

构建自己的docker映像

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