コンテナにホストと同じネットワークのプライベートIPアドレスを設定するメモ
何がしたかったのか
コンテナでAdGuardを構築しようと思ったところ、ホストPCですでに稼働しているnginxやDNSとポートが衝突してしまった。
コンテナにLAN内からアクセスできるIPアドレスを振れば解決できるのではないか?と考えた
レシピ
compose.ymlのnetworksセクションでdriverにmacvlanを使用する
services:
nginx:
image: nginx:latest
ports:
- "80:80"
networks:
ipvlan_test:
ipv4_address: 192.168.10.xxx # 固定するIPアドレス
networks:
ipvlan_test:
driver: macvlan
driver_opts:
parent: eth0 # ホストPCのNICを指定
ipam:
config:
- subnet: 192.168.10.0/24 # サブネットアドレスを指定
gateway: 192.168.10.1 # ゲートウェイアドレスを指定
注意点としては、サービス側に個別にIPアドレスを振ってあげる必要がありそう(未検証
固定IPアドレスを指定せずでもdocker compose up自体はできたが、ルーターからDHCPでアドレスは取得していないっぽい。
同一ネットワーク内で重複したIPが振られる可能性があるので、ルーターのDHCP除外範囲設定をしてcompose.yml側で除外済みのIPに固定してあげる必要がありそう。