Search code examples
dockercommand-line-interfaceeditor

How do I edit a file after I shell to a Docker container?


I successfully shelled to a Docker container using:

docker exec -i -t 69f1711a205e bash

Now I need to edit file and I don't have any editors inside:

root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#

How do I edit files?


Solution

  • As in the comments, there's no default editor set - strange - the $EDITOR environment variable is empty. You can log in into a container with:

    docker exec -it <container> bash
    

    And run:

    apt-get update
    apt-get install vim
    

    Or use the following Dockerfile:

    FROM  confluent/postgres-bw:0.1
    
    RUN ["apt-get", "update"]
    RUN ["apt-get", "install", "-y", "vim"]
    

    Docker images are delivered trimmed to the bare minimum - so no editor is installed with the shipped container. That's why there's a need to install it manually.

    EDIT

    I also encourage you to read my post about the topic.