Docker コンテナーに IP アドレスを付ける方法

半分は備忘録ですが、 MACVLAN を使って Docker コンテナーに IP アドレスを付ける方法を記述します。

MACVLAN の設定

/etc/network/interfaces の記述例:

allow-hotplug eth0
iface eth0 inet manual
        up ip link set $IFACE up arp off
        up ifup macvlan0 || true
iface eth0 inet6 auto
        accept_ra 0
        down ifdown macvlan0 || true
        down ip link set $IFACE down

iface macvlan0 inet static
        address 192.0.2.2
        netmask 255.255.255.0
        gateway 192.0.2.1
        pre-up ip link add link eth0 name "$IFACE" type macvlan mode bridge 1
iface macvlan0 inet6 static
        address 2001:DB8::2/64
        accept_ra 2
        autoconf 1
        post-down ip link delete "$IFACE" type macvlan || true

補足: eth0 は IP 通信に使わないので ARP と RA を無効化しておきます。

Docker ネットワークの設定

コマンド例:

docker network create -d macvlan \
    --subnet=192.0.2.0/24 \
    --gateway=192.0.2.1 \
    --ip-range=192.0.2.128/25 \
    -o parent=eth0 \
    network-name

Docker コンテナーの設定

コマンド例:

docker container --network=network-name \
    --ip=192.0.2.3 \
    image