実行中のコンテナーにアタッチする
Visual Studio Code はコンテナーを作成して起動できますが、それがワークフローに合わない場合もあります。その場合、どのように起動されたかに関わらず、既に実行中の Docker コンテナーに VS Code を「アタッチ」する方が良いかもしれません。アタッチ後、devcontainer.json を使用してコンテナー内のフォルダーを開くときと同様に、拡張機能のインストール、編集、デバッグが可能です。
Docker コンテナーにアタッチする
Docker コンテナーにアタッチするには、コマンドパレット (F1) から Dev Containers: 実行中のコンテナーにアタッチ... を選択するか、アクティビティバーの リモートエクスプローラー を使用して、コンテナー ビューから、接続したいコンテナーの コンテナーにアタッチ インラインアクションを選択します。

注意: Alpine Linuxコンテナを使用する場合、ネイティブコード内の
glibc依存関係が原因で、一部の拡張機能が動作しない場合があります。
アタッチ済みコンテナーの構成ファイル
VS Code は、特定の Docker コンテナーに繰り返し接続する際のセットアップを高速化するために、イメージまたはコンテナー名レベルの構成ファイルをサポートしています。アタッチ後、フォルダーを開いたり、拡張機能をインストールしたり、ポートを転送したりするたびに、ローカルのイメージ固有の構成ファイルが自動的に更新されて設定が記憶されるため、再度アタッチしたときにすべてが元の状態に戻ります。
-
既定では、イメージレベル の構成が使用されます。アタッチ後に表示または更新するには、コマンドパレット (F1) から Dev Containers: コンテナー構成ファイルを開く を選択します。
-
構成を コンテナー名 に関連付けたい場合は、アタッチ後にコマンドパレット (F1) から Dev Containers: 名前付き構成ファイルを開く を選択します。これ以降の更新は、イメージレベルではなく、この名前レベルの構成に適用されます。
これらのファイルはどちらも 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: アタッチ済みコンテナー構成ファイルを開く... を選択し、表示されたリストからイメージ/コンテナー名を選択して編集することもできます。
最後に、アタッチするコンテナーに関係なくインストールしたい拡張機能がある場合は、settings.json を更新して、常にインストールされるべき拡張機能のリストを指定できます。
アタッチ済みコンテナーの構成リファレンス
アタッチ済みコンテナーの構成ファイルは devcontainer.json に似ており、そのプロパティのサブセットをサポートしています。
| プロパティ | タイプ | 説明 |
|---|---|---|
workspaceFolder |
string | コンテナーに接続するときに VS Code が開くべき既定のパスを設定します (これは多くの場合、コンテナー内でソースコードが見つかるボリュームマウントへのパスです)。既定では設定されていません (空のウィンドウが開きます)。 |
extensions |
array | コンテナーが作成されたときに、その内部にインストールされるべき拡張機能を指定する拡張機能 ID の配列です。既定値は [] です。 |
settings |
object | 既定の settings.json 値をコンテナー/マシン固有の設定ファイルに追加します。 |
forwardPorts |
array | コンテナー内からローカルマシンに転送されるべきポートのリストです。 |
portsAttributes |
object | ポート番号、"host:port" 値、範囲、または正規表現を既定のオプションセットにマップするオブジェクトです。利用可能なオプションについては、ポート属性を参照してください。例:"portsAttributes": {"3000": {"label": "アプリケーションポート"}} |
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 または他の接続ツールのプロセスに含めるユーザー環境変数を「プローブ」するために使用するシェルの種類を示します: none、interactiveShell、loginShell、または 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: 実行中の Kubernetes コンテナーにアタッチ... を選択します。別の方法として、まず Dev Containers 拡張機能とともに Kubernetes 拡張機能と kubectl をインストールします。次に、アクティビティバーから Kubernetes エクスプローラーを選択し、アタッチしたいコンテナーが存在するクラスターと Pod を展開します。最後に、コンテナーを右クリックし、コンテキストメニューから Visual Studio Code をアタッチ を選択します。
注: Kubernetes クラスター内のコンテナーでは、アタッチ済みコンテナーの構成ファイルはまだサポートされていません。

次のステップ
- 開発コンテナーを作成する - 作業環境用のカスタムコンテナーを作成します。
- 高度なコンテナ - 高度なコンテナシナリオのソリューションを見つけます。
- devcontainer.jsonリファレンス -
devcontainer.jsonスキーマを確認します。