Tips Docker: Keep your bash history



Nov 12th 2019 in Développement web

I'm starting by heavily using docker containers for developing, testing and reviewing web applications.

There was one thing that bugged me for a long time: the fact that I lost the history of commands I typed in the shell (bash) of the containers each time I stopped/restarted them. I don't have a good memory and don't like to repeat myself. Also, I'm constantly searching in my history (with history|grep thing or CTRL+R) and wasn't able to do it correctly in a container.

I will present you two solutions to resolve this annoying issue.

Share the .bash_history file with the host (docker-compose)

The idea is simple: store bash history on the host and bind-mount this file into the container.

In the following example, I use a file named .docker_bash_history that I stored in my home directory. Important the file must exist before mounting it.

You can achieve this with the following docker-compose.yml example file:

One advantage of this approach is that the bash history can be shared between all your containers. You can also bind-mount your .bash_history file of the host instead of using a dedicated file (.docker_bash_history).

Store .bash_history into a named volume

Another way is to persist the .bash_history into a named volume and rely on the HISTFILE environment variable to specify where the history file is:

Without docker-compose

The same approach can be used without docker-compose. Eq:

$ docker run -it -v ~/.docker_bash_history:/root/.bash_history ubuntu bash

That's it !