Dev Containersの設定
devcontainer内にThunder Clientがインストールされるように.devcontainer/devcontainer.json
のcustomizations.vscode.extensions
にrangav.vscode-thunder-client
を追加します。
{
...
"customizations": {
"vscode": {
"extensions": [
...
"rangav.vscode-thunder-client"
]
}
}
}
データの永続化
Thunder Clientのデータを永続化するために.devcontainer/compose.devcontainer.yml
を作成して既存のcompose.yml
をオーバーライドします。
Thunder Clientのデータは~/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client
に保存されます。
上記の情報は~/.th-client/thunder-cache.json
に記述されています。
{"globalPath":"/home/user/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client"}
~/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client
にボリュームマウントを設定するためcompose.devcontainer.yml
を次のように記述します。
services:
api:
volumes:
- th-client-storage:/home/user/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client
command: bash -c "while sleep 1000; do :; done"
volumes:
th-client-storage:
devcontainer起動時にcompose.devcontainer.yml
が読み込まれるように.devcontainer/devcontainer.json
のdockerComposeFile
に./compose.devcontainer.yml
を追加します。
{
...
"dockerComposeFile": ["../compose.yml", "./compose.devcontainer.yml"],
...
}
devcontainerをrootで実行している場合には上記で問題ないと思いますがDockerfile内で一般ユーザーに変更している場合にはdevcontainer起動時に次のようなエラーとなります。
mkdir: cannot create directory ‘/home/user/.vscode-server/bin’: Permission denied
~/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client
にボリュームマウントを設定したためコンテナ起動時にrootで.vscode-server
ディレクトリが作成されることが原因です。
.vscode-server
の所有者を変更するため次の内容で.devcontainer/devcontainer-entrypoint.sh
を作成します。
#!/usr/bin/env bash
set -eu
user="$(whoami)"
sudo chown -R "${user}" "/home/${user}/.vscode-server"
exec "$@"
コンテナ内でsudo
を使用できるようにするためdevcontainer.json
のfeatures
に次の記述を追加します。
{
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {},
}
}
コンテナ起動時に上記のファイルを実行するためcompose.devcontainer.yml
を編集します。
services:
api:
volumes:
- th-client-storage:/home/user/.vscode-server/data/User/globalStorage/rangav.vscode-thunder-client
entrypoint:
- bash
- ./.devcontainer/devcontainer-entrypoint.sh
command: bash -c "while sleep 1000; do :; done"
volumes:
th-client-storage:
これでdevcontainerが起動できるようになります。
localhost
の代わりにhost.docker.internal
を使用する
devcontainer内でThunder