以下のためのdocker-compose
コンテナ間で使用して認められたソリューションをプライベートネットワークを作成するために、ブリッジネットワークを使用してdocker0
いない作業のコンテナからの出力インターフェイスではないので、docker0
代わりに、それはランダムに生成されたインターフェイスIDのような、です。
$ ifconfig
br-02d7f5ba5a51: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.1 netmask 255.255.240.0 broadcast 192.168.47.255
残念ながら、そのランダムIDは予測不可能であり、composeがネットワークを再作成する必要があるたびに変更されます(たとえば、ホストの再起動時)。これに対する私の解決策は、既知のサブネットでプライベートネットワークを作成し、iptables
その範囲を受け入れるように構成することです。
ファイルスニペットを作成します。
version: "3.7"
services:
mongodb:
image: mongo:4.2.2
networks:
- mynet
# rest of service config and other services removed for clarity
networks:
mynet:
name: mynet
ipam:
driver: default
config:
- subnet: "192.168.32.0/20"
ご使用の環境で必要な場合は、サブネットを変更できます。を192.168.32.0/20
使用docker network inspect
して任意に選択し、デフォルトで作成されているものを確認しました。
iptables
ホスト上でプライベートサブネットをソースとして許可するように構成します。
$ iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPT
これが最も単純なiptables
ルールです。宛先ポートなど、他の制限を追加することもできます。iptablesルールが正常に機能していることを確認したら、それらを永続化することを忘れないでください。
このアプローチには、繰り返し可能なため自動化できるという利点があります。私はansibleのtemplate
モジュールを使用して、変数置換を含む構成ファイルをデプロイし、次にモジュールiptables
とshell
モジュールを使用して、ファイアウォールルールをそれぞれ構成して永続化します。