web-dev-qa-db-ja.com

ホストネットワークと他のユーザー定義ネットワークをDocker-Composeで一緒に使用する方法は?

Docker-Composeファイルで定義されている2つのDockerコンテナーを相互に接続したい(appdb)。また、そのうちの1つ(app)もHostネットワークに接続する必要があります。

コンテナーは、共通のユーザー定義ネットワーク(appnetまたはdefault)に接続して、Dockerネットワーキングの埋め込みDNS機能を使用する必要があります。

appは、ドッカーホストの物理ネットワークでイーサネットブロードキャスト(ネットワーク層2)を受信するために、ホストネットワークに直接接続する必要もあります。

Composeでnetwork_mode: Hostnetworksの両方のディレクティブを一緒に使用すると、次のエラーが発生します。

ERROR: 'network_mode' and 'networks' cannot be combined

だから私はnetworksのみでこれをしなければなりません!?

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_Host=db
    depends_on:
      - db
    networks:
      - appnet
      - hostnet

  db:
    image: mongo:latest
    container_name: db
    networks:
      - appnet

networks:
  appnet:
  hostnet:
    external:
      name: Host

前述の構成ファイルはエラーを生成します。 ERROR: for app network-scoped alias is supported only for containers in user defined networks

ネットワークでHostをネットワークで定義せずに使用すると(既に存在するため)、それは言います。 ERROR: Service "app" uses an undefined network "Host"

Docker-ComposeでHostネットワークと他のユーザー定義ネットワーク(またはデフォルト)を一緒に使用する方法は?

Docker version 17.11.0-ce-rc3, build 5b4af4fdocker-compose version 1.17.1, build 6d101fbを使用しています

18
Simon Schürg

TL; DRできません。ホストネットワーキングは、そのコンテナのdockerネットワーク名前空間をオフにします。オンとオフの両方を同時に持つことはできません。

代わりに、公開されたポート、またはボリュームとして共有できるUNIXソケットを使用してデータベースに接続します。例えば。ポートを公開する方法は次のとおりです。

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_Host=127.0.0.1

  db:
    image: mongo:latest
    container_name: db
    ports:
      - 127.0.0.1:27017:27017
1
BMitch

ホストネットワークを使用するために、それを定義する必要はありません。 「ports」キーワードを使用して、ホストネットワークで公開するサービスのポートを定義します。

1
Miq