【发布时间】:2015-04-01 12:35:04
【问题描述】:
有没有办法与 docker 容器共享 .bash_history 卷,这样每次我进入 shell 时,我的 bash 历史记录都可以滚动浏览?
如果能用 IPython 做同样的事情,那就太棒了。
【问题讨论】:
标签: bash docker ipython dockerfile
有没有办法与 docker 容器共享 .bash_history 卷,这样每次我进入 shell 时,我的 bash 历史记录都可以滚动浏览?
如果能用 IPython 做同样的事情,那就太棒了。
【问题讨论】:
标签: bash docker ipython dockerfile
这是来自documentation about volume: Mount a host file as a data volume的例子:
docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash
这会将您放入新容器中的 bash shell,您将获得来自主机的 bash 历史记录,当您退出容器时,主机将获得键入命令的历史记录,而在容器中。
【讨论】:
.bash_history 文件。我以 root 用户身份运行容器内的命令。有什么想法吗?
.bash_history 应该在用户的主目录中,而不是 fs 的根目录中。应该是docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash,因为我们默认是 docker 容器的 root。
.docker_bash_history并以与您提到的相同的方式安装它。
docker run --rm -it -v ~/.bash_history:/root/.docker_bash_history ubuntu /bin/bash。如果是重复的,可以自动复制历史文件(注意不要覆盖容器更新的历史)。
在你的docker-compose.override.yml:
version: '2'
services:
whatever:
…
volumes:
- …
- ~/.bash_history:/root/.bash_history
【讨论】:
~ 替换为$HOME 的值,但它的可移植性会降低
要保留 IPython 历史记录,您可以将 IPYTHONDIR 环境变量设置为映射卷内的某个位置。
docker-compose.override.yml 看起来像这样:
version: '2'
services:
some-service:
environment:
- IPYTHONDIR=/app/.ipython
volumes:
- .:/app
【讨论】:
我的解决方案在以下情况下很有用:
.bash_history 共享本地 .bash_history
.bash_history
.bash_history 提交到 git repo,但您想在容器启动时在同一目录中自动创建它我假设文件结构是:
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 - 它会自动创建 .bash_history:
export HISTFILE=~/bash/.bash_history
touch $HISTFILE
您可以选择添加到 .gitignore:
docker/bash/.bash_history
【讨论】:
您也可以使用命名卷来实现此目的,并通过定义HISTFILE 环境变量告诉 bash 在哪里可以找到 bash 历史文件。我在这里解释了更多:
https://antistatique.net/en/we/blog/2019/11/12/tips-docker-keep-your-bash-history
【讨论】:
对于 bash
volumes:
- ./.data/shell_history/php_bash_history.txt:/home/www-data/.bash_history #bash
为 sh
volumes:
- ./.data/shell_history/nginx_bash_history.txt:/root/.ash_history #sh
【讨论】: