持久化 Bash 历史记录
您还可以使用挂载在会话/容器重建期间保留您的 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)运行开发容器:重建容器以应用更改。否则,运行开发容器:在容器中打开文件夹...以连接到容器。
注意:如果您的主机正在运行 Linux(包括 Windows 上的 WSL),并且其用户的 UID 和 GID 与开发容器中用户的 UID 和 GID 不匹配,则开发容器用户的 UID 和 GID 将更新为与主机用户相同,您需要通过将以下内容添加到 devcontainer.json 来对卷应用相同的更新。
```json
"postCreateCommand": {
"Fix Volume Permissions": "sudo chown -R $(whoami): /commandhistory"
}
```