Docker实践(19) – 保留容器的bash历史记录

我们知道在容器内做试验完成时,容器可以设置自动清除,这就省了好多事。不过仍然有一些不方便的地方。其中一个是我们可能需要在容器中多次执行一个相同的命令,而bash历史又没有了,只能手打。

问题

你想与容器共享你的主机bash历史记录。

解决方法

为docker run命令设置一个别名来与主机共享bash历史记录。

讨论

要理解这个问题,我们来展示一个场景。
假设你在Docker容器做试验,比如做一些有趣的和可重复使用的东西。这里我们使用echo命令,但这可能是一个长且复杂的一连串程序:

  1. $ docker run -ti --rm ubuntu /bin/bash
  2. $ echo my amazing command
  3. $ exit

过了一些时间,你想重新执行之间执行过的复杂的echo命令。不过,你不记得命令了,而且终端会话也找不到这个命令,你尝试找bash历史记录,但没有任何输出:

  1. $ history | grep amazing

为了解决这个问题,我们可以在你运行docker镜像时挂载一个volume,如下:

  1. $ docker run -e HIST_FILE=/root/.bash_history \
  2.  -v=$HOME/.bash_history:/root/.bash_history \
  3.  -ti ubuntu /bin/bash

命令太长太难记了,我们把它设置为一个别名吧,在~/.bashrc文件中添加:

  1. $ aliashl-surround">
    1. function basher() {
    2.   if [[ $1 = 'run' ]]
    3.   then
    4. shift
    5. /usr/bin/docker run \
    6.   -e HIST_FILE=/root/.bash_history \
    7.   -v $HOME/.bash_history:/root/.bash_history "$@"
    8.    else
    9.     /usr/bin/docker "$@"
    10. fi
    11. }alias docker=basher

现在当你打开bash shel并执行任意的docker run命令时都会自动把bash历史记录的设置添加到命令中去。

标签:容器BashDocker 发布于:2019-11-20 17:38:37