如何在Docker容器上运行vi?

208

我已在我的虚拟机上安装了Docker,现在想使用vi创建一个文件。

但是它给我显示了一个错误:

bash: vi: command not found

1
vi可能未安装在容器内。您安装和运行的是哪个容器? - Hüseyin BABAL
1
你需要更具体一些。你是想在容器内运行vi吗?如果是的话,该容器基于哪个镜像?很可能你没有安装vi。(apt-get install vim) - wpp
3
在容器内配置可能并不是一个好的选择,建议在 Dockerfile 文件中完成配置。 - Adrian Mouat
你正在使用Boot2Docker吗?主机文件系统可能已被映射到你的Docker引擎上,以便你可以从那里编辑文件,而不是在Docker引擎虚拟机内部进行编辑。 - booyaa
3
可能是重复的问题:如何在进入Docker容器后编辑文件? - A.B.
显示剩余4条评论
15个回答

282

使用以下命令登录容器:

docker exec -it <container> bash

然后,运行以下命令。

apt-get update
apt-get install vim

40
如果在运行 apt-get 时遇到权限被拒绝的问题,您需要以 root 用户身份运行 docker exec。"docker exec -u root -it <container> bash"。然后 apt-get 应该可以正常工作。 - java25
1
感谢@arunprakashpj。这是唯一一个适用于从AWS仓库下载的镜像的命令。 - realPK
1
谢谢@Arun,现在vim命令在容器内可以正常工作了。 - Vasanthakumar Jagannathan
有许多Docker镜像不是基于Debian的。在基于Alpine的镜像上,apt-get命令可能无法正常工作。 - undefined

56

运行命令取决于您使用的基础镜像。

对于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和其他文件以构建新镜像。由于容器内部的更改是短暂的,并且在容器被替换时将会丢失,因此在生产环境中绝不能这样做。


1
错误:无法锁定数据库:权限被拒绝。 - garg10may
1
@garg10may 命令需要以 root 用户身份运行。Dockerfile 中的 USER root 可以实现此功能,但请确保切换回其他用户。我是一个正在运行的容器:docker exec -u root ... - BMitch
这是一个很好的答案,因为当你在容器中并且不知道Linux是构建在哪个容器上时,它非常有用。 - Tomáš Záluský

46

使用这个:

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

以上命令的说明

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

1
我尝试了,但是出现了这个错误 bash: apt-get: command not found - Junaid
@Junaid 请使用 apk add 进行确认。 - Yogi Ghorecha

41

你的容器可能没有默认安装vim。

在终端中运行apt-get install vim,然后你就可以开始使用了。


2
是的,但我更喜欢 vim-tiny(Ubuntu) - Ben Whaley
6
在运行“apt-get install vim”之前,您需要运行“apt-get update”。 - user1521213
6
先运行 apt-get update 命令,然后运行 apt-get install vim 命令。 - Yogi Ghorecha
1
在运行apt-get之前,你还应该检查apt-get是否已经安装。这在CentOS或Alpine镜像上是不可能的。 - undefined

18

错误:: bash: vi: 命令未找到

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

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

在我的情况下,“--user =“ root”确实是必要的。 - Bob Yoplait
这个有效。谢谢。 - Jagrut Sharma
这个有效。谢谢。 - undefined

15

在你的Dockerfile文件中添加以下行,然后重新构建docker镜像。

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

13

如果不安装不必要的编辑器,可以通过ssh从docker主机编辑文件而使docker镜像保持较小:

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

7
如果容器正在运行ssh,这种方法才有效,我一开始也觉得这是个绝妙的想法,但似乎无法让它正常工作。 - Kevin

11
最被投票的回答有正确的想法,但在我的情况下并不起作用。来自@java25的评论解决了我的问题。我必须以root用户身份登录docker容器安装vim。我只是将评论发布为答案,以便其他遇到类似问题的人更容易找到它。
docker exec -ti --user root <container-id> /bin/bash

一旦进入docker,现在运行以下命令以安装vi。

apt-get update
apt-get install vim

9

在基于 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
要在您的Docker容器中安装,可以运行以下命令:

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

但是这将仅限于安装vim的容器。如果要使其可用于所有容器,请编辑Docker文件并添加以下内容:

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

或者您也可以扩展新的Docker文件中的镜像并添加上述命令。例如:

FROM < 镜像名称 >

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接