Tips Docker: Keep your bash history

Auteur(s) de l'article

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:
<script src="https://gist.github.com/gido/9b7e323571cf61820bd4baef92e30861.js?file=docker-compose.example1.yml "></script>
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:
<script src="https://gist.github.com/gido/9b7e323571cf61820bd4baef92e30861.js?file=docker-compose.example2.yml "></script>

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 !