Docker コンテナー上で実行されているプロセスにアタッチする

Visual Studio を使用して、Windows Docker コンテナーまたは Linux .NET Core Docker コンテナーで実行されているアプリをデバッグできます。

前提条件

Linux サーバー上にまだ存在しない場合は、SSH サーバーをインストールする必要があります。curl または wget で解凍してインストールします。 たとえば、Ubuntu では、以下を実行して行うことができます。

sudo apt-get install openssh-server unzip curl

セキュリティで保護されたファイル転送プロトコル (SFTP) も有効にする必要があります。 ほとんどの SSH ディストリビューションでは既定で SFTP がインストールされ、有効化されますが、必ずそうなるわけではありません。

Linux Docker コンテナー上で実行されているプロセスにアタッチする

[プロセスにアタッチ] ダイアログ ボックスを使用して、ローカル コンピューターまたはリモート マシン上の Linux .NET Core Docker コンテナーで実行されているプロセスに Visual Studio デバッガーをアタッチできます。

重要

この機能を使うには、ソース コードへのローカル アクセス権を持っている必要があります。

Linux Docker コンテナー内の実行中のプロセスにアタッチするには:

  1. Visual Studio で、[デバッグ] > [プロセスにアタッチ] (CTRL + ALT + P キー) を選択して、[プロセスにアタッチ] ダイアログ ボックスを開きます。

Docker (Linux コンテナー) の接続の種類が表示されている Visual Studio の [プロセスにアタッチ] ダイアログのスクリーンショット。

  1. [接続の種類][Docker (Linux コンテナー)] に設定します。

  2. [Docker コンテナーの選択] ダイアログボックスを使用して [検索] を選択し、 [接続先] を設定します。

    Docker コンテナー プロセスは、ローカルでもリモートでもデバッグできます。

    Docker コンテナー プロセスをローカルでデバッグするには:

    1. [Docker CLI ホスト][ローカル コンピューター] に設定します。
    2. アタッチする実行中のコンテナーをリストから選択し、 [OK] をクリックします。

    [Docker コンテナーの選択] メニュー

    B. Docker コンテナー プロセスをリモートでデバッグするには:

    Note

    Docker コンテナーで実行中のプロセスにリモート接続するには、2 つのオプションがあります。 SSH を使用するという 1 つ目のオプションは、ローカル コンピューターに Docker ツールがインストールされていない場合に最適です。 ローカルに Docker ツールをインストールしていて、リモートの要求を受け入れるように構成されている Docker デーモンがある場合は、2 つ目のオプションである Docker デーモンの使用を試してください。

    1. SSH を使用してリモート マシンに接続するには:

      1. [追加] を選択してリモート システムに接続します。
        リモート システムに接続する
      2. SSH またはデーモンに正常に接続した後にアタッチする実行中のコンテナーを選択し、 [OK] をクリックします。
    2. "Docker デーモンを介してプロセスを実行しているリモート コンテナーにターゲットを設定するには"

      1. [Docker ホスト (オプション)] でデーモンのアドレス (つまり、TCP 経由、IP 経由など) を指定し、更新リンクをクリックします。
      2. デーモンに正常に接続した後にアタッチする実行中のコンテナーを選択し、 [OK] をクリックします。
  3. Visual Studio で [使用可能なプロセス] リストから対応するコンテナー プロセスを選択し、 [アタッチ] を選択して C# のデバッグを開始します。

    Visual Studio の [プロセスにアタッチ] ダイアログのスクリーンショット。[接続の種類] が [Docker (Linux コンテナー)] に設定され、dotnet プロセスが選択されています。

Windows Docker コンテナー上で実行されているプロセスにアタッチする

[プロセスにアタッチ] ダイアログ ボックスを使用して、ローカル コンピューター上の Windows Docker コンテナーで実行されているプロセスに Visual Studio デバッガーをアタッチできます。

重要

この機能を .NET Core プロセスで使用するには、.NET Core Cross-Platform Development ワークロードをインストールする必要があります。また、ソース コードへのローカル アクセス権を持っている必要があります。

Windows Docker コンテナーで実行中のプロセスにアタッチするには:

  1. Visual Studio で、[デバッグ] > [プロセスにアタッチ] (または CTRL+ALT+P キー) を選択して、[プロセスにアタッチ] ダイアログ ボックスを開きます。

    Docker (Windows コンテナー) の接続の種類が表示されている Visual Studio の [プロセスにアタッチ] ダイアログのスクリーンショット。

  2. [接続の種類][Docker (Windows コンテナー)] に設定します。

  3. [Docker コンテナーの選択] ダイアログボックスを使用して [検索] を選択し、 [接続先] を設定します。

    重要

    ターゲット プロセスは、それが実行されている Docker Windows コンテナーと同じプロセッサ アーキテクチャを持つ必要があります。

    現在、SSH 経由でターゲットをリモート コンテナーに設定することはできません。Docker デーモンを使用して実行する必要があります。

    "Docker デーモンを介してプロセスを実行しているリモート コンテナーにターゲットを設定するには"

    1. [Docker ホスト (オプション)] でデーモンのアドレス (つまり、TCP 経由、IP 経由など) を指定し、更新リンクをクリックします。

    2. デーモンに正常に接続した後にアタッチする実行中のコンテナーを選択し、[OK] を選択します。

  4. [使用可能なプロセス] リストから対応するコンテナー プロセスを選択し、 [アタッチ] を選択して C# のデバッグを開始します。

    Visual Studio の [プロセスにアタッチ] ダイアログのスクリーンショット。[接続の種類] が [Docker (Windows コンテナー)] に設定され、dotnet.exe プロセスが選択されています。