现已推出!阅读 10 月份的新功能和修复。

持久保存 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) 中运行 **Dev Containers: Rebuild Container** 以获取更改。否则,运行 **Dev Containers: Open Folder in Container...** 以连接到容器。

视频:如何在开发容器中使您的 bash 历史记录持久保存