web-dev-qa-db-ja.com

Docker Compose-ネットワーク名に識別子を追加する

Docker-compose.vs.debug.ymlファイルにネットワークを作成しようとしています:

networks:
  myNetwork:
    driver: bridge

しかし、いくつかの識別子を追加するドッカー:

docker network ls->

NETWORK ID          NAME                                         DRIVER              SCOPE 
0e1fec1a9a30        dockercompose1163770330_myNetwork            bridge              local

このように名前を付けるオプションがある場合:

NETWORK ID          NAME                                         DRIVER              SCOPE
0e1fec1a9a30        myNetwork                                    bridge              local

別々のプロジェクトの2つのコンテナーを自動的に接続するために必要です。

13
Mark Sabakov

Docker-composeでネットワークを作成すると、名前自体が決定されます。通常、これはdocker-compose.ymlが配置されているディレクトリの名前を調べ、それをプレフィックスとして使用します。あなたが示した名前に基づいて、このdocker-compose.ymlファイルはdockercompose1163770330という名前のディレクトリにあるようです。これを指定したmyNetwork名と組み合わせて、dockercompose1163770330_myNetworkという名前のネットワークを作成します。

ネットワークの正確な名前を制御する場合は、2つのオプションがあります。

  1. Docker-composeの外部で作成されたネットワーク(「外部」ネットワーク)を使用します。
networks:
  default:
    external:
      name: myNetwork

これは、他の何かがすでにネットワークを作成していることを意味します。このようなネットワークをまだお持ちでない場合は、簡単に作成できます。

docker network create myNetwork
  1. (可能な場合)visual-studioがパスに名前を付ける方法を決定し、そのパスを静的なものに変更します。これが可能かどうか、またはどうすればよいか、私にはわかりません。ただし、dockercompose1163770330を制御して、好みに合わせて変更できる場合は、そこから作成されるネットワーク名を予測できます。
10
Dan Lowe

VS2017 dcprojを使用していると思います。これを解決するには、dcprojプロジェクトでPreBuildEventとしてネットワークを手動で作成します。ビルド前のターゲットを.dcprojファイルに追加します。

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Creating external docker network" />
    <Exec Command="docker network create customnetwork"  IgnoreExitCode="true" />
</Target>

次に、docker-composeファイルで外部ネットワークを指定できます。

networks:
  default:
    external:
      name: customnetwork

他のプロジェクトの前にdcprojを開始するか、ネットワークを共有するすべてのプロジェクトに同じprebuild execを追加する必要があります。

3
doorstuck