How to run vi on docker container?

I have installed docker on my host virtual machine. And now want to create a file using vi.

But it's showing me an error:

bash: vi: command not found 
8

13 Answers

login into container with the following command:

docker exec -it <container> bash 

Then , run the following command .

apt-get update apt-get install vim 
3

The command to run depends on what base image you are using.

For Alpine, vi is installed as part of the base OS. Installing vim would be:

apk -U add vim 

For Debian and Ubuntu:

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

For CentOS, vi is usually installed with the base OS. For vim:

yum install -y vim 

This should only be done in early development. Once you get a working container, the changes to files should be made to your image or configs stored outside of your container. Update your Dockerfile and other files it uses to build a new image. This certainly shouldn't be done in production since changes inside the container are by design ephemeral and will be lost when the container is replaced.

3

USE THIS:

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

Explanation of the above command

  1. apt-get update => Will update the current package
  2. apt-get install => Will install the package
  3. -y => Will by pass the permission, default permission will set to Yes.
  4. vim => Name of the package you want to install.
2

Your container probably haven't installed it out of the box.

Run apt-get install vim in the terminal and you should be ready to go.

3

Add the following line in your Dockerfile then rebuild the docker image.

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

Alternatively, keep your docker images small by not installing unnecessary editors. You can edit the files over ssh from the docker host to the container:

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

error:: bash: vi: command not found

run the below command by logging as root user to the container--

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

Use below command in Debian based container:

apt-get install vim-tiny 

Complete instruction for using in Dockerfile:

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

It doesn't install unnecessary packages and removes unnecessary downloaded files, so your docker image size won't increase dramatically.

To install within your Docker container you can run command

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

But this will be limited to the container in which vim is installed. To make it available to all the containers, edit the Dockerfile and add

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

or you can also extend the image in the new Dockerfile and add above command. Eg.

FROM < image name >

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

The most voted answer has the correct idea, however, it did not work in my case. The comment from @java25 did the trick in my case. I had to log into the docker container as a root user to install vim. I am just posting the comment as an answer so that it is easier for others, having the similar problem, to find it.

docker exec -ti --user root <container-id> /bin/bash 

Once you are inside docker, run the following commands now to install vi.

apt-get update apt-get install vim 

Inside container (in docker, not in VM), by default these are not installed. Even apt-get, wget will not work. My VM is running on Ubuntu 17.10. For me yum package manager worked.

Yum is not part of Debian or ubuntu. It is part of red-hat. But, it works in Ubuntu and it is installed by default like apt-get

To install vim, use this command

yum install -y vim-enhanced 

To uninstall vim :

yum uninstall -y vim-enhanced 

Similarly,

yum install -y wget yum install -y sudo 

-y is for assuming yes if prompted for any question asked after doing yum install package-name

If you actually want a small editor for simple housekeeping in a docker, use this in your Dockerfile:

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

I used it on an Ubuntu 18 based docker. (Of course you might need an RUN apt-get update before it but if you are making your own Docker file you probably already have that.)

Usually changing a file in a docker container is not a good idea. Everyone will forget about the change after a while. A good way is to make another docker image from the original one.

Say in a docker image, you need to change a file named myFile.xml under /path/to/docker/image/. So, you need to do.

  1. Copy myFile.xml in your local filesystem and make necessary changes.
  2. Create a file named 'Dockerfile' with the following content-
FROM docker-repo:tag ADD myFile.xml /path/to/docker/image/ 

Then build your own docker image with docker build -t docker-repo:v-x.x.x .

Then use your newly build docker image.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like