に参加して、VS Code の AI 支援開発について学びましょう。

Bashの履歴を保持する

マウントを使用して、セッション/コンテナの再構築後もbashコマンド履歴を保持することもできます。

まず、Dockerfileを更新し、bashでコマンドが使用されるたびに履歴が更新され、保持する場所に保存されるようにします。

ルートユーザーがいる場合は、Dockerfileを次のように更新します。

RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
    && echo "$SNIPPET" >> "/root/.bashrc"

非ルートユーザーがいる場合は、Dockerfileを次のように更新します。user-name-goes-hereを、コンテナ内の非ルートユーザーの名前に置き換えてください。

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 はホストユーザーのものに更新されます。その場合、devcontainer.json に以下を追加することで、ボリュームにも同じ更新を適用する必要があります。

```json
  "postCreateCommand": {
    "Fix Volume Permissions": "sudo chown -R $(whoami): /commandhistory"
  }
```

ビデオ: 開発コンテナで bash 履歴を保持する方法

© . This site is unofficial and not affiliated with Microsoft.