I won’t go into the what of macvlans as there are already plenty of articles which cover the topic, including this one directly from Docker. However you may soon find yourself in a situation where your container needs to access a service on the host but it can’t access it. In order to make this work, you need to assign an ip address from the macvlan on the host. This can be easily accomplished in a few commands:
ip link add macvlan0 link eth0 type macvlan mode bridge
ip addr add 192.168.100.31/32 dev macvlan0
ip link set macvlan0 up
ip route add 192.168.100.24/29 dev macvlan0
However after a reboot you might be disappointed to find that this no longer works. Creating an interface is distribution dependent so this only applies to Debian. Create a new file named /etc/network/interfaces.d/macvlan0.
sudo vi /etc/network/interfaces.d/macvlan0
Then add the following commands to the file:
auto macvlan0
iface macvlan0 inet manual
pre-up ip link add macvlan0 link eth0 type macvlan mode bridge
pre-up ip addr add 192.168.100.31/32 dev macvlan0
up ip link set macvlan0 up
post-up ip route add 192.168.100.24/29 dev macvlan0