不能在 docker 容器中使用 vim、vi、nano、yum
Posted
技术标签:
【中文标题】不能在 docker 容器中使用 vim、vi、nano、yum【英文标题】:Cannot use vim, vi, nano, yum inside docker container 【发布时间】:2016-06-08 06:42:09 【问题描述】:启动一个名为 nginx 的 dockerised 应用程序,然后在其中执行 bash。令我惊讶的是,我在那个容器中找不到 vim 、 vi 甚至 yum 。
请原谅我,因为我对 docker 和学习非常陌生。
以下命令可用于重现该问题。
docker run -d --name=my_nginxtemp nginx
docker exec -i -t my_nginxtemp bash
docker commit my_nginxtemp my_nginx
我的主机是 Ubuntu 16.04,我正在使用最新的 docker-engine 和 docker cli
root@jim-Ubuntu1504:/home/jim/web# docker version
Client:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 22:00:43 2016
OS/Arch: linux/amd64
Server:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 22:00:43 2016
OS/Arch: linux/amd64
root@jim-Ubuntu1504:/home/jim/web#
请不要继续使用我从 15.04 起升级的主机名:slight_smile:
root@jim-Ubuntu1504:/home/jim/web# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04 LTS
Release: 16.04
Codename: xenial
root@jim-Ubuntu1504:/home/jim/web#
非常感谢任何帮助。
【问题讨论】:
今天刚刚发生在我身上!我在一些主题中也看到了更改 Dockerfile。我会试试的 How do I edit a file after I shell to a Docker container?的可能重复 【参考方案1】:sudo apt-get 更新 sudo apt-get install vim
我有同样的问题。我按照上面简单的两个步骤操作,效果很好。
【讨论】:
@D8Amonk > 那是因为您已经以 root 身份登录。只需删除“sudo”【参考方案2】:令我惊讶的是,我在那个容器中找不到
vim
、vi
甚至yum
。
这仅仅取决于nginx image 及其基础镜像:如果vim
从未安装在那里,您的容器将找不到它。
您可以构建自己的映像,从 nginx
和 adding the software you need 开始。
FROM nginx
RUN apt-get update
RUN apt-get install vim
【讨论】:
但是该图像可以访问互联网吗?说是否要安装任何其他软件?令我惊讶的是,它最终是一个操作系统和网络服务器,那么为什么不具备安装软件的能力呢? @learner 该图像将具有与您的主机相同的 Internet 访问权限。如果您使用代理,请使用 ***.com/a/35286398/6309 并确保您的 docker 守护进程知道该代理 (docs.docker.com/engine/admin/systemd/#http-proxy) 酷。我会建立那个形象!非常感谢 是的,它与主机具有相同的访问权限。是因为 docker 的 Bridge 网络吗?想明白这一点 是的,这就是docs.docker.com/engine/userguide/networking/dockernetworks中详述的内容【参考方案3】:为像我这样的初学者添加更多描述: 有些容器是在 ubuntu 上构建的,因此您甚至找不到特定于 RedHat/CentOS 的 yum 包管理器。
1.使用 exec 进入容器:
username@hostname:/home/username $ docker container exec -it container_image_name bash
2。找出构建容器映像的操作系统并采取相应措施 现在,要确定容器映像是在哪个操作系统上构建的,我们还可以在进入该容器后使用以下命令检查操作系统版本:
root@5e9d0e3c1001:/# cat /etc/*release*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@5e9d0e3c1001:/#
然后执行下面的操作(我们做更新的原因是第一次安装之前是强制的):
root@5e9d0e3c1001:/# apt-get update
root@5e9d0e3c1001:/# apt-get install vim
参考:https://forums.docker.com/t/cannot-use-vim-vi-nano-yum-inside-docker-container/14905
【讨论】:
【参考方案4】:这是我们不得已的编辑器:
echo "This is a workaround." > file.txt
echo "Added more text." >> file.txt
cat file.txt
【讨论】:
【参考方案5】:您可以创建一个 Dockerfile 来使用 nginx docker 映像并使用您要添加的内容进行修改...
FROM nginx
RUN ["apt-get","update"]
RUN ["apt-get","install","-y","vi"]
【讨论】:
vi
找不到我的包。不得不做vim
。
所以运行 ["apt-get","install","-y","vim"]以上是关于不能在 docker 容器中使用 vim、vi、nano、yum的主要内容,如果未能解决你的问题,请参考以下文章