web-dev-qa-db-fra.com

Docker et .bash_history

Existe-t-il un moyen de partager un volume .bash_history avec un conteneur Docker de sorte que chaque fois que je vais dans un shell, mon historique bash soit disponible pour le défilement?

Ce serait génial de pouvoir faire la même chose avec IPython aussi.

24
tzenderman

Voici l'exemple de la documentation sur le volume: Monter un fichier hôte en tant que volume de données :

docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash

Cela vous déposera dans un nouveau conteneur dans un shell bash, vous aurez votre historique bash de l'hôte et lorsque vous quitterez le conteneur, l'hôte aura l'historique des commandes tapées pendant qu'il est dans le conteneur.

15
user2915097

Dans votre docker-compose.override.yml :

version: '2'
services:
  whatever:
    …
    volumes:
      - …
      - ~/.bash_history:/root/.bash_history
5
Édouard Lopez

Pour conserver l'historique IPython, vous pouvez définir la variable d'environnement IPYTHONDIR sur quelque part dans votre volume mappé.

Le docker-compose.override.yml ressemblerait à ceci:

version: '2'
services:
  some-service:
    environment:
      - IPYTHONDIR=/app/.ipython
    volumes:
      - .:/app
4
allthethings

Ma solution est utile lorsque:

  • vous ne voulez pas partager votre .bash_history local avec .bash_history dans votre conteneur
  • vous utilisez d'autres Shell (comme Fish Shell) mais vous voulez enregistrer .bash_history entre vos versions
  • vous ne voulez pas valider .bash_history dans git repo mais vous voulez le créer automatiquement dans le même répertoire au démarrage d'un conteneur

Je suppose que la structure du fichier est la suivante:

docker-compose.yml
docker/
   \--> bash/
      \--> .bashrc
      \--> .bash_history

docker-compose.yml

web-service:
  build: .
  volumes:
  - ./docker/bash/.bashrc:/home/YOUR_USER_NAME/.bashrc
  - ./docker/bash:/home/YOUR_USER_NAME/bash

./docker/bash/.bashrc - il créera automatiquement .bash_history:

export HISTFILE=~/bash/.bash_history
touch $HISTFILE

Vous pouvez éventuellement ajouter à .gitignore :

docker/bash/.bash_history
0
jozo