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