How to run vi on docker container?
Asked Answered
S

16

210

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
Scattering answered 20/7, 2015 at 11:55 Comment(9)
vi may not be installed inside container. Which container have you installed and run?Kinny
You have to be more specific. Are you trying to run vi inside a container, if so which image is the container based on? In all likelihood you don't have vi installed. (apt-get install vim)Lawerencelawes
It depends on which image you are building from. Most probably image you are using is so lighter that it only has things you need to run as an image. You need to manually install packages you need.Jowl
You probably shouldn't be doing config inside a container. Do it in the Dockerfile instead.Slighting
are you using boot2docker? the host file system has probably been mapped onto your docker engine to allow you edit files from there rather than inside the docker engine vm.Amberlyamberoid
Possible duplicate of How to edit file after I shell to a docker container?Buyers
It‘s the same like #30853747Tellurite
https://mcmap.net/q/126198/-how-to-run-vi-on-docker-containerEthnomusicology
NOTE: I had a problem to update apt and install vim due unreachable name servers in /etc/resolv.conf. Therefore for me was crucial before to fix the setup: echo "nameserver 8.8.8.8" > /etc/resolv.conf.Schinica
I
289

login into container with the following command:

docker exec -it <container> bash

Then , run the following command .

apt-get update
apt-get install vim
Injudicious answered 27/3, 2017 at 9:52 Comment(2)
Should you encounter permission denied issue while running apt-get, you need to run docker exec as root. "docker exec -u root -it <container> bash". Then apt-get should work.Janinejanis
There are many docker images which aren't based on debian. apt-get won't work too well on an Alpine based image.Sadowski
S
56

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.

Sharronsharyl answered 4/1, 2018 at 14:12 Comment(2)
ERROR: Unable to lock database: Permission deniedNazar
@Nazar commands need to be run as root. USER root inside the Dockerfile does this, but be sure to switch back to your other user. I'm a running container: docker exec -u root ...Sharronsharyl
E
47

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.
Ethnomusicology answered 7/10, 2019 at 10:11 Comment(2)
I tried it but got this error bash: apt-get: command not foundPaymar
@Paymar check with apk addEthnomusicology
S
41

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.

Semolina answered 20/7, 2015 at 12:52 Comment(4)
Yep, but I prefer vim-tiny (Ubuntu)Dithyramb
Before running 'apt-get install vim', you need to run 'apt-get update'.Evening
First apt-get update THEN apt-get install vimEthnomusicology
Before running apt-get, you should also check if apt-get is installed at all. Which won't be the case on CentOS or Alpine images.Sadowski
C
19

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
Charnel answered 5/2, 2021 at 6:29 Comment(1)
--user="root" was indeed necessary in my caseSubstructure
A
15

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

RUN apt-get update && apt-get install -y vim
Argali answered 24/1, 2019 at 14:12 Comment(0)
A
13

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
Axillary answered 21/4, 2017 at 17:22 Comment(1)
Wouldn't this only work if the container is running ssh? I thought it was a brilliant idea at first, but cannot seem to get it to work.Sympathizer
D
12

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
Downbeat answered 28/1, 2022 at 21:25 Comment(0)
S
9

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.

Swearword answered 9/2, 2020 at 13:46 Comment(0)
D
4

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

Dally answered 5/1, 2018 at 17:37 Comment(0)
F
4

Start a Docker container:

docker run -it <image_name> /bin/bash

Install Vim:

sudo apt update
sudo apt install vim
Facies answered 20/6, 2023 at 4:34 Comment(0)
A
2

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

Advertent answered 8/3, 2019 at 5:8 Comment(0)
F
2

error:: bash: vim: command not found

Run the below command by logging as root user to the container:

microdnf install -y vim
Farriery answered 26/9, 2022 at 10:53 Comment(0)
F
0

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.)

Flowerer answered 11/3, 2020 at 11:0 Comment(0)
F
0

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.

Fleetwood answered 17/6, 2020 at 10:37 Comment(0)
A
0

To install Vim, simply include the following line in your Dockerfile

RUN apt-get update && apt-get install apt-file -y && apt-file update && apt-get install vim -y
Abri answered 26/4, 2024 at 17:50 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.