持久化 Bash 历史记录
您还可以使用挂载(mount)来持久化您的 bash 命令历史记录,以便在会话或容器重建之间保留。
首先,更新您的 Dockerfile,以便每次在 bash 中使用命令时,历史记录都能被更新并存储在我们指定的位置。
如果您使用的是 root 用户,请在 Dockerfile 中添加以下内容:
RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
&& echo "$SNIPPET" >> "/root/.bashrc"
如果您使用的是非 root 用户,请在 Dockerfile 中添加以下内容。将 user-name-goes-here 替换为容器中非 root 用户的名称。
ARG USERNAME=user-name-goes-here
RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
&& mkdir /commandhistory \
&& touch /commandhistory/.bash_history \
&& chown -R $USERNAME /commandhistory \
&& echo "$SNIPPET" >> "/home/$USERNAME/.bashrc"
接下来,添加一个本地卷来存储命令历史记录。此步骤取决于您是否正在使用 Docker Compose。
-
Dockerfile 或镜像:在
devcontainer.json文件中使用mounts属性(VS Code 1.41+ 版本以上)。"mounts": [ "source=projectname-bashhistory,target=/commandhistory,type=volume" ] -
Docker Compose:在
docker-compose.yml中为相应的服务更新(或扩展)以下配置。version: '3' services: your-service-name-here: volumes: - projectname-bashhistory:/commandhistory # ... volumes: projectname-bashhistory:
最后,如果您已经构建并连接到了容器,请从命令面板(F1)运行 Dev Containers: Rebuild Container 以应用更改。否则,请运行 Dev Containers: Open Folder in Container... 来连接到容器。
注意:如果您的宿主机运行的是 Linux(包括 Windows 上的 WSL),且其用户的 UID 和 GID 与开发容器中用户的 UID 和 GID 不匹配,开发容器用户的 UID 和 GID 将会自动更新为宿主机用户的 ID。此时,您需要在
devcontainer.json中添加以下内容,以便将相同的更新应用到卷中。
```json
"postCreateCommand": {
"Fix Volume Permissions": "sudo chown -R $(whoami): /commandhistory"
}
```