web-dev-qa-db-ja.com

Docker Composeでネットワークを自動的に作成する

Dockerでカスタムネットワークを使用する場合

networks:
  default:
    external:
      name: service-tier

そして、それを実行しようとすると、エラーが発生します

エラー:ネットワークサービス層は外部として宣言されましたが、見つかりませんでした。 docker network create service-tierを使用してネットワークを手動で作成し、再試行してください。

Docker-composeを使用してネットワークを自動的に作成することは可能ですか、それとも最初に手動で作成する以外の方法はありませんか?

9

externalは既存のネットワークを使用します。作成してネットワークを作成する場合は、次のようにします。

networks:
  network1:
  network2:

..ネットワークを作成するように構成を指示します。 <compose-dir>-<network name>という名前が付けられます。docker network lsを使用して作成を確認します。

デフォルトのネットワークを上書きしたり、プロパティをさらに指定したりすることもできます。

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450

..デフォルトのネットワーク設定MTUを1450に上書きします(ホストの1500 mtu未満で、パスmtuディスカバリーが正しく機能しない場合に便利です)。 他のブリッジドライバオプション があります。

externalは、2つの構成設定のサービスが互いに通信する場合、または手動で作成されたネットワークがある場合に、より意味があります。

10
Grimmy

@ Grimmy が正しく述べられているように、dockerは言及されたすべてのネットワークを作成するので、別の構成ファイルを実行することでそれらを後で参照できます。

ただし、デフォルトで生成されるネットワーク名は、実用的または堅牢ではありません。非常に長いことが判明するか、dockerチームが命名戦略についての意見を変更する可能性があるためです。

ただし、ファイルバージョンの作成は3.5 (手段 docker-compose バージョン 1.18.0)ネットワークに好きな名前を付けることができるため、全体的なソリューションはさらに堅牢です。

これを実現する方法を示す次のスニペットを参照してください。

ファイル1の作成

version: '3.5'
services:
  svc-name:

    ...                          

    networks:
      - specific-network-name
    container_name: "exact-container-reference"

    ...

networks:
  specific-network-name:
    external: false
    name: specific-network-name

ファイル2の作成

version: '2'
services:

  svc-using-svc-name:

    ...

    networks:
      - default
      - specific-network-name
    external_links:
      - exact-container-reference

    ...

networks:
  specific-network-name:
    external: true
7
helvete