ドキュメントに基づいた情報ではなく、実際に試したことを書いています。
間違いやより便利で安全な方法があれば教えてください🙇
概要
| ソケット | 用途 |
|---|---|
vscode-ssh-auth-*.sock |
SSH Agent Forwarding |
vscode-git-*.sock |
Git 認証情報(HTTPS トークン)の転送 |
vscode-ipc-*.sock |
VS Code 拡張機能とサーバー間の通信 |
vscode-remote-containers-ipc-*.sock |
Dev Containers 拡張とコンテナ間の制御通信 |
VS Code で devcontainer を開くと、コンテナの /tmp に以下のソケットが自動で作成されます。これらはホストとコンテナを繋ぐ便利な仕組みです。
普段はそこまで気にすることはありませんが、Claude Code などを自動実行モードで動かす場合にセキュリティ的に考慮すべきポイントが増えます。これらのソケットはコンテナ内のプロセスからアクセス可能であり、アタックサーフェスとなるリスクがあるためです。
本記事は、Dev Container CLIを使った場合にどうなるかを検証してみたものです。
「余計なソケットを作りたくないなら devcontainer CLI を使うほうがいい」というのが私の結論になります。
devcontainer CLI の基本コマンド
検証時に使ったコマンドを記載します。
# ターミナルセッション中だけ有効
# ワークスペースのパスを環境変数に入れておくと楽になります。
export WORKSPACE=/path/to/project
# インストール
npm install -g @devcontainers/cli
# コンテナを起動
devcontainer up --workspace-folder $WORKSPACE
# コンテナを起動してそのままシェルに入る
devcontainer up --workspace-folder $WORKSPACE && docker exec -it $(docker ps -q --filter "label=devcontainer.local_folder=$WORKSPACE") bash
# コンテナを停止
docker stop $(docker ps -q --filter "label=devcontainer.local_folder=$WORKSPACE")
# コンテナを削除(停止済みの場合)
docker rm $(docker ps -aq --filter "label=devcontainer.local_folder=$WORKSPACE")
# 停止と削除をまとめて行う場合
docker rm -f $(docker ps -aq --filter "label=devcontainer.local_folder=$WORKSPACE")
devcontainer CLI で起動した場合
devcontainer CLI で起動したコンテナに docker exec で入った場合、/tmp にソケットは存在しません。
devcontainer up --workspace-folder $WORKSPACE
docker exec -it $(docker ps -q --filter "label=devcontainer.local_folder=$WORKSPACE") bash
# ここからコンテナの中
ls -la /tmp
# total 8
# drwxrwxrwt 1 root root 4096 ... .
# drwxr-xr-x 1 root root 4096 ... ..
VS Code 接続後はソケットが残り続ける
一度 VS Code で開いたコンテナは、VS Code を閉じてもソケットファイルが /tmp に残ります。コンテナを削除しない限り消えません。
VS Code で開く → ソケット作成 → VS Code を閉じる → ソケットは残る
確認手順
- VS Code を使ってdevcontainerを開く
- "Reopen Folder Locally" でローカルに戻す(コンテナは停止して残る)
- コンテナを起動して
/tmpを確認する
# コンテナを起動
docker start $(docker ps -aq --filter "label=devcontainer.local_folder=$WORKSPACE")
# /tmp を確認(ソケットが残っているはず)
docker exec $(docker ps -q --filter "label=devcontainer.local_folder=$WORKSPACE") ls /tmp
/tmpを空にしたい場合
VS Code で一度開いたコンテナの /tmp を空にしたい場合は、コンテナを削除してから devcontainer CLI で起動し直す必要があります。
# コンテナを削除
docker rm -f $(docker ps -aq --filter "label=devcontainer.local_folder=$WORKSPACE")
# devcontainer CLI で起動し直す
devcontainer up --workspace-folder $WORKSPACE
まとめ
| 起動・接続方法 |
/tmp のソケット |
|---|---|
| VS Code で開く | SSH・Git・IPC など複数作成される |
devcontainer CLI + docker exec
|
作成されない |
Claude Code のようなエージェントをコンテナ内で動かす場合、VS Code 経由で開くとホストの SSH 鍵や Git 認証情報がコンテナから利用できる状態になります。リスクを最小化したいなら devcontainer CLI + docker exec の組み合わせが選択肢になります。
SSHを利用する場合は、一度クリーンな状態にしてから必要な設定のみを明示的に行う方が安全です。
自分が書いた関連記事