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

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

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

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

Docker コンテナにアタッチするには、コマンドパレット (F1) から Dev Containers: Attach to Running Container... を選択するか、アクティビティバーの リモートエクスプローラー を使用し、コンテナ ビューから接続したいコンテナの Attach to 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 string コンテナに接続するときに VS Code が開くべきデフォルトパスを設定します (多くの場合、ソースコードがコンテナ内にあるボリュームマウントへのパス)。デフォルトでは設定されていません (空のウィンドウが開かれます)。
extensions array コンテナ作成時にコンテナ内にインストールされるべき拡張機能を指定する拡張機能 ID の配列です。デフォルトは [] です。
settings object コンテナ/マシン固有の設定ファイルにデフォルトの settings.json 値を追加します。
forwardPorts array コンテナ内からローカルマシンに転送されるべきポートのリスト。
portsAttributes object ポート番号、"host:port" 値、範囲、または正規表現をデフォルトオプションのセットにマップするオブジェクトです。利用可能なオプションについては、ポート属性 を参照してください。例:
"portsAttributes": {"3000": {"label": "Application port"}}
otherPortsAttributes object portsAttributes を使用して設定されていないポート、ポート範囲、ホストのデフォルトオプションです。利用可能なオプションについては、ポート属性 を参照してください。例:
"otherPortsAttributes": {"onAutoForward": "silent"}
remoteEnv object VS Code (またはターミナルなどのサブプロセス) の環境変数を設定または上書きする名前と値のペアのセットですが、コンテナ全体には適用されません。値には環境変数と 事前定義された変数 を参照できます。
例: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }
remoteUser string コンテナ内で VS Code が実行されるユーザー (ターミナル、タスク、デバッグなどのサブプロセスを含む) を上書きします。デフォルトは、コンテナ全体が実行されているユーザー (多くの場合 root) です。
userEnvProbe enum VS Code またはその他の接続されたツールのプロセスに含めるユーザー環境変数を「プローブ」するために使用するシェルのタイプを示します: noneinteractiveShellloginShell、または loginInteractiveShell (デフォルト)。使用される特定のシェルは、ユーザーのデフォルトシェル (通常は bash) に基づいています。たとえば、bash の対話型シェルには通常 /etc/bash.bashrc~/.bashrc で設定された変数が含まれ、ログインシェルには通常 /etc/profile~/.profile の変数が含まれます。このプロパティを loginInteractiveShell に設定すると、これら4つのファイルすべてから変数が取得されます。
postAttachCommand string,
array
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 を展開します。最後に、コンテナを右クリックしてコンテキストメニューから Attach Visual Studio Code を選択します。

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

Attach to Kubernetes Container

次のステップ