Docker-Composeファイルで定義されている2つのDockerコンテナーを相互に接続したい(app
とdb
)。また、そのうちの1つ(app
)もHost
ネットワークに接続する必要があります。
コンテナーは、共通のユーザー定義ネットワーク(appnet
またはdefault
)に接続して、Dockerネットワーキングの埋め込みDNS機能を使用する必要があります。
app
は、ドッカーホストの物理ネットワークでイーサネットブロードキャスト(ネットワーク層2)を受信するために、ホストネットワークに直接接続する必要もあります。
Composeでnetwork_mode: Host
とnetworks
の両方のディレクティブを一緒に使用すると、次のエラーが発生します。
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 5b4af4f
とdocker-compose version 1.17.1, build 6d101fb
を使用しています
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
ホストネットワークを使用するために、それを定義する必要はありません。 「ports」キーワードを使用して、ホストネットワークで公開するサービスのポートを定義します。