Docker和.bash_history

tze*_*man 31 bash ipython docker dockerfile

有没有办法.bash_history与docker容器共享一个卷,这样每次进入shell时我都可以使用我的bash历史滚动浏览?

能用IPython做同样的事情真是太棒了.

use*_*097 18

它是关于卷文档中的示例:将主机文件挂载为数据卷:

docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

这将使您进入新容器中的bash shell,您将获得主机的bash历史记录,当您退出容器时,主机将具有在容器中键入的命令的历史记录.

  • 文档中确实存在拼写错误.`.bash_history`应该在用户的主目录中,而不是fs的根目录.应该是`docker run --rm -it -v~/.bash_history:/ root/.bash_history ubuntu/bin/bash`,因为我们默认是docker容器中的root. (3认同)
  • 几乎不相关,但我不想分享bash历史,只需要将主机终端历史记录带到一个容器,所以从这里获取线索并进一步扩展它,我使用了一个单独的`.docker_bash_history`并以相同的方式安装正如你所提到的那样. (2认同)
  • 小心点!我将 4000 多行长历史记录文件安装到一个容器中,它立即被裁剪为 500 行,因为 HISTSIZE 正是这个数字,无法恢复它,我只是丢失了大约 90% 的 bash 历史记录:D (2认同)

Édo*_*pez 7

在你的docker-compose.override.yml:

version: '2'
services:
  whatever:
    …
    volumes:
      - …
      - ~/.bash_history:/root/.bash_history
Run Code Online (Sandbox Code Playgroud)


all*_*ngs 5

为了保留IPython历史记录,可以将IPYTHONDIR环境变量设置为映射卷内的某个位置。

docker-compose.override.yml是这样的:

version: '2'
services:
  some-service:
    environment:
      - IPYTHONDIR=/app/.ipython
    volumes:
      - .:/app
Run Code Online (Sandbox Code Playgroud)