macvlanドライバを利用するNetworkを作成して、docker run
時に利用することで、ホストPCと同セグメントのIPアドレスを割り当てて、コンテナを動作させることができます。
Networking using a macvlan network
Ubuntu 18.04で動作を確認
Networkの作成
$ docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=enp4s0 mynet
上記の例では、mynet
という名称でアダプタが作成されます。
--subnet
、--gateway
には、ホストと同じネットワークの値を指定。-o parent
には、ホストのアダプタID(ifconfig参照)を指定します。
$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 xxxx::xx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 0 (イーサネット)
RX packets 351 bytes 3305069 (3.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 262 bytes 26479 (26.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
...
コンテナ起動
$ docker run -d --name nginx20 --network mynet --ip 192.168.1.20 -p 80:80 nginx
--network
に先ほど作成したNetworkを指定、--ip
にコンテナへ割り当てたいIPアドレスを指定して起動することで、該当IPアドレスで動作します。
制限事項
ネットワークアダプタの仕組み上?、ホストPCのローカルから、本ネットワークを割り当てたコンテナのIPアドレスにはアクセスできません。