Bashの履歴を保持する
マウントを使用して、bash
コマンド履歴をセッションやコンテナーの再構築をまたいで永続化することもできます。
まず、bash
でコマンドが使用されるたびに履歴が更新され、永続化する場所に保存されるように、Dockerfile
を更新します。
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: コンテナーの再構築」を実行します。そうでない場合は、「Dev Containers: コンテナーでフォルダーを開く...」を実行してコンテナーに接続します。
注: ホストマシンが Linux (Windows の WSL を含む) を実行しており、そのユーザーの UID と GID が開発コンテナーのユーザーの UID と GID と一致しない場合、開発コンテナーユーザーの UID と GID はホストユーザーのものに更新されます。その際、
devcontainer.json
に以下を追加して、ボリュームにも同じ更新を適用する必要があります。
```json
"postCreateCommand": {
"Fix Volume Permissions": "sudo chown -R $(whoami): /commandhistory"
}
```