我在主机虚拟机上安装了docker。现在想要使用vi
创建一个文件。
但它给我一个错误:
bash: vi: command not found
答案 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);
}
},
上述命令的说明
答案 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的文件。因此,您需要这样做。
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/
然后使用docker build -t docker-repo:v-x.x.x .
然后使用您新构建的docker映像。