VS Codeのエージェントモードを拡張するには、を試してください!

実行中のコンテナーにアタッチする

Visual Studio Code はコンテナーを作成して開始できますが、それはあなたのワークフローに合わないかもしれません。その場合、Visual Studio Code を既に実行中の Docker コンテナーに「アタッチ」することを好むかもしれません。それは、コンテナーがどのように開始されたかに関わらずです。一度アタッチされると、devcontainer.json を使用してコンテナー内のフォルダーを開くのと同じように、拡張機能をインストールしたり、編集したり、デバッグしたりできます。

Docker コンテナーにアタッチする

Docker コンテナーにアタッチするには、コマンドパレット (F1) から Dev Containers: Attach to Running Container... を選択するか、アクティビティバーの リモートエクスプローラー を使用し、コンテナー ビューから接続したいコンテナーの コンテナーにアタッチ インラインアクションを選択します。

Containers Explorer screenshot

注: Alpine Linuxコンテナーを使用する場合、拡張機能内のネイティブコードにあるglibcの依存関係により、一部の拡張機能が動作しない場合があります。

アタッチされたコンテナー構成ファイル

VS Code は、特定の Docker コンテナーに繰り返し接続する際のセットアップを高速化するために、イメージまたはコンテナー名レベルの構成ファイルをサポートしています。一度アタッチされると、フォルダーを開いたり、拡張機能をインストールしたりポートを転送したりするたびに、ローカルのイメージ固有の構成ファイルが自動的に更新され、設定が記憶されるため、次にアタッチするときにはすべてが適切な状態に戻ります。

  • 既定では、イメージレベルの構成が使用されます。アタッチ後にそれを表示または更新するには、コマンドパレット (F1) から Dev Containers: Open Container Configuration File を選択します。

  • 構成を コンテナー名 に関連付けたい場合は、アタッチ後にコマンドパレット (F1) から Dev Containers: Open Named Configuration File を選択します。この時点以降の更新は、イメージレベルではなく、この名前レベルの構成に適用されます。

これらのファイルはどちらも devcontainer.json プロパティのサブセットをサポートしています。

{
  // Default path to open when attaching to a new container.
  "workspaceFolder": "/path/to/code/in/container/here",

  // Set *default* container specific settings.json values on container create.
  "settings": {
    "terminal.integrated.defaultProfile.linux": "bash"
  },

  // Add the IDs of extensions you want installed when the container is created.
  "extensions": ["dbaeumer.vscode-eslint"],

  // An array port numbers to forward
  "forwardPorts": [8000],

  // Container user VS Code should use when connecting
  "remoteUser": "vscode",

  // Set environment variables for VS Code and sub-processes
  "remoteEnv": { "MY_VARIABLE": "some-value" }
}

プロパティとその使用法の完全なリストについては、アタッチされたコンテナー構成リファレンスを参照してください。

保存すると、同じイメージ/コンテナー名で初めてコンテナーを開くたびに、これらのプロパティが環境の構成に使用されます。

ヒント: 構成に問題がある場合は、コンテナーにアタッチされていないときにコマンドパレット (F1) から Dev Containers: Open Attached Container Configuration File... を選択し、表示されたリストからイメージ/コンテナー名を選択して編集することもできます。

最後に、アタッチするコンテナーに関わらずインストールしたい拡張機能がある場合は、settings.json を更新して、常にインストールされるべき拡張機能のリストを指定できます。

アタッチされたコンテナー構成リファレンス

アタッチされたコンテナー構成ファイルは devcontainer.json に類似しており、そのプロパティのサブセットをサポートしています。

プロパティ タイプ 説明
workspaceFolder 文字列 VS Codeがコンテナーに接続するときに開くデフォルトのパスを設定します(これは多くの場合、コンテナー内でソースコードが見つかるボリュームマウントへのパスです)。デフォルトでは設定されていません(空のウィンドウが開きます)。
extensions 配列 コンテナー作成時にその内部にインストールされるべき拡張機能を指定する拡張IDの配列。デフォルトは[]です。
settings オブジェクト デフォルトのsettings.json値をコンテナー/マシン固有の設定ファイルに追加します。
forwardPorts 配列 コンテナー内からローカルマシンに転送されるべきポートのリスト。
portsAttributes オブジェクト ポート番号、"host:port"値、範囲、または正規表現をデフォルトオプションのセットにマッピングするオブジェクト。利用可能なオプションについては、ポート属性を参照してください。例:
"portsAttributes": {"3000": {"label": "Application port"}}
otherPortsAttributes オブジェクト portsAttributesを使用して構成されていないポート、ポート範囲、およびホストのデフォルトオプション。利用可能なオプションについては、ポート属性を参照してください。例:
"otherPortsAttributes": {"onAutoForward": "silent"}
remoteEnv オブジェクト VS Code(またはターミナルなどのサブプロセス)の環境変数を設定または上書きする名前と値のペアのセットですが、コンテナー全体ではありません。値には環境変数と定義済み変数を参照できます。
例: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }
remoteUser 文字列 VS Codeがコンテナー内で実行されるユーザー(ターミナル、タスク、デバッグなどのサブプロセスを含む)を上書きします。デフォルトでは、コンテナー全体が実行されているユーザー(多くの場合root)です。
userEnvProbe 列挙型 VS Codeまたは他の接続されたツールのプロセスに含めるユーザー環境変数を「プローブ」するために使用するシェルの種類を示します: noneinteractiveShellloginShell、またはloginInteractiveShell(デフォルト)。使用される特定のシェルは、ユーザーのデフォルトシェル(通常はbash)に基づいています。例えば、bashのインタラクティブシェルは通常/etc/bash.bashrc~/.bashrcに設定された変数を含み、ログインシェルは通常/etc/profile~/.profileからの変数を含みます。このプロパティをloginInteractiveShellに設定すると、これら4つのファイルすべてから変数が取得されます。
postAttachCommand 文字列、
配列
VS Codeがコンテナーにアタッチされた後に実行するコマンド文字列またはコマンド引数のリスト。複数のコマンドを実行するには、文字列内で&&を使用します。例えば、"yarn install"または"apt-get update && apt-get install -y curl"です。配列構文["yarn", "install"]は、シェルを使用せずにコマンド(この場合はyarn)を直接呼び出します。デフォルトでは設定されていません。
配列構文はシェルなしでコマンドを実行することに注意してください。文字列と配列プロパティのフォーマットの詳細については、こちらを参照してください。

アタッチされたコンテナー構成ファイル内の変数

変数は、アタッチされた構成ファイル内の特定の文字列値で、次の形式で参照できます: ${variableName}。次の表は、使用できる変数のリストです。

変数 プロパティ 説明
${containerEnv:VAR_NAME} remoteEnv コンテナーが起動して実行された後、その内部にある既存の環境変数(この場合はVAR_NAME)の値。例: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }

Kubernetes クラスター内のコンテナーにアタッチする

Kubernetes クラスター内のコンテナーにアタッチするには、コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から Dev Containers: Attach to Running Kubernetes Container... を選択します。または、Dev Containers 拡張機能と一緒に Kubernetes 拡張機能kubectlをまずインストールします。次に、アクティビティバーからKubernetesエクスプローラーを選択し、アタッチしたいコンテナーが存在するクラスターとPodを展開します。最後に、コンテナーを右クリックし、コンテキストメニューから Visual Studio Code にアタッチを選択します。

注: アタッチされたコンテナー構成ファイルは、Kubernetes クラスター内のコンテナーではまだサポートされていません。

Attach to Kubernetes Container

次のステップ