Table of Contents

Reelles VLAN für Docker Container

Diese Anleitung soll helfen, ein am Docker Host anliegendes VLAN für Docker Container verfügbar zu machen. Dadurch können die Container komplett in das Netzwerk eingebunden werden. Einzelne Port-Freigaben für Container werden nicht mehr benötigt. Eine Doppelbelegung von Ports kann so vermieden werden.

Anlegen des VLAN auf dem Host

Konfigurationsdatei erstellen (netplan)

In dieser Anleitung soll das VLAN mit der ID 2, anliegend auf dem Interface enp2s0f0 für Dockercontainer verfügbar gemacht werden.

sudo vi /etc/netplan/mynetplan-config.yaml

Inhalt von mynetplan-config.yaml

 network:
  version: 2
  ethernets:
    enp2s0f0: {}
  vlans:
    vlan.4:
      id: 4
      link: enp2s0f0
      dhcp4: no
      addresses: [192.168.3.9/24]
      gateway4: 192.168.3.1
      nameservers:
        addresses: [192.168.3.1]
    vlan.2:
      id: 2
      link: enp2s0f0
      dhcp4: no
      addresses: [192.168.1.10/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1]

Konfiguration übernehmen sudo netplan apply

Konfigurationsdatei erstellen (Synology NAS)

In dieser Anleitung soll das VLAN mit der ID 2, anliegend auf dem Interface bond0 für Dockercontainer verfügbar gemacht werden.

cd /etc/sysconfig/network-scripts
sudo vi ifcfg-bond0.2

Inhalt von ifcfg-bond0.2

DEVICE=bond0.2
VLAN_ROW_DEVICE=bond0
VLAN_ID=2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0

Netzwerkdienste neustarten sudo /etc/rc.network restart

MACVLAN erstellen

ip link del MYLAN
ip link add MYLAN link bond0.2 type macvlan mode bridge
ip addr add 192.168.1.80/32 dev MYLAN
ip link set MYLAN up
ip route add 192.168.1.80/28 dev MYLAN

Docker Netzwerk erstellen

docker network create -d macvlan \
    --subnet=192.168.1.0/24 \
    --gateway=192.168.1.1 \
    --ip-range=192.168.1.80/28 \
    --aux-address 'host=192.168.1.80' \
    -o parent=bond0.2 MYLAN

Testen

$ docker run --rm -itd \
  --network MYLAN \
  --name my-alpine \
  alpine:latest \
  ash

Netzwerk vom neuen Container prüfen:

docker container inspect my-alpine

...truncated...
"Networks": {
  "MYLAN": {
      "IPAMConfig": null,
      "Links": null,
      "Aliases": [
          "12f5c3c9ba5c"
      ],
      "NetworkID": "c6203997842e654dd5086abb1133b7e6df627784fec063afcbee5893b2bb64db",
      "EndpointID": "aa08d9aa2353c68e8d2ae0bf0e11ed426ea31ed0dd71c868d22ed0dcf9fc8ae6",
      "Gateway": "192.168.1.1",
      "IPAddress": "192.168.1.81",
      "IPPrefixLen": 24,
      "IPv6Gateway": "",
      "GlobalIPv6Address": "",
      "GlobalIPv6PrefixLen": 0,
      "MacAddress": "02:42:ac:10:56:02",
      "DriverOpts": null
  }
}
...truncated

Quellen