Ho un server dedicato con più indirizzi IP, alcuni IP hanno indirizzo MAC associati mentre altri (in una substring) non dispongono di indirizzi MAC. Ho creato la networking macluetooth docker utilizzando:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=188.40.76.0/26 --gateway=188.40.76.1 -o parent=eth0 macvlan_bridge
Ho ip: 88.99.102.115 con mac: 00: 50: 56: 00: 60: 42. Creato un contenitore utilizzando:
docker run --name cont1 --net=macvlan_bridge --ip=88.99.102.115 --mac-address 00:50:56:00:60:42 -itd nginx
Questo funziona, posso accedere a nginx ospitato in quel indirizzo IP dall'esterno.
Caso con IP che non dispone di indirizzo MAC e il gateway è fuori dalla substring.
subnet: 88.99.114.16/28, gateway: 88.99.102.103
Imansible creare la networking utilizzando:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.114.16/28 --gateway=88.99.102.103 -o parent=eth0 mynetwork
Errore di lancio:
no matching subnet for gateway 88.99.102.103
Prova con l'aumento della portta di sottoreti per includere il gateway:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.0.0/16 --gateway=88.99.102.103 -o parent=eth0 mynetwork
La networking è stata creata, quindi ha iniziato il contenitore nginx usando 'mynetwork' e bene non ho l'indirizzo MAC per 88.99.114.18 in modo utilizzato un indirizzo mac random 40: 1c: 0f: bd: a1: d2.
docker run --name cont1 --net=mynetwork --ip=88.99.114.18 --mac-address 40:1c:0f:bd:a1:d2 -itd nginx
Imansible raggiungere nginx (88.99.102.115).
Non ho molta conoscenza nel networking, sarà molto utile se spiegherai in dettaglio.
Il mio file / etc / network / interfaces:
### Hetzner Online GmbH - installimage # Loopback device: auto lo iface lo inet loopback iface lo inet6 loopback # device: eth0 auto eth0 iface eth0 inet static address 88.99.102.103 netmask 255.255.255.192 gateway 88.99.102.65 # default route to access subnet up route add -net 88.99.102.64 netmask 255.255.255.192 gw 88.99.102.65 eth0 iface eth0 inet6 static address 2a01:4f8:221:1266::2 netmask 64 gateway fe80::1
Potresti iniziare leggendo semplici concetti di routing o sottoreti e routing
Come si crea una networking di dock macvlan se il mio gateway è fuori dalla mia substring?
Un indirizzo del gateway deve essere sulla stessa substring di un'interface. Per utilizzare questa nuova substring è necessario utilizzare uno degli indirizzi IP e assegnarlo da qualche parte all'host come gateway.
Dalla schermata di hosting, la subnet 88.99.114.16/28 è stata configurata per percorrere via il tuo host 88.99.102.103. È necessario creare un'interface da qualche parte nell'host per utilizzare come gateway se si desidera che Docker utilizzi il resto degli indirizzi IP nella substring.
Creare una networking ponte per Docker da utilizzare, il bridge verrà assegnato l'indirizzo gateway 88.99.114.17
docker network create \ --driver=bridge \ --subnet 88.99.114.16/28 \ --gateway=88.99.114.17 \ name0
Potrebbe anche essere necessario abilitare l'inoltro IP per il routing di lavoro. Configurare l'inoltro ip in /etc/sysctl.conf
:
net.ipv4.ip_forward = 1
e Applica la nuova impostazione
sysctl -p /etc/sysctl.conf
Quindi eseguire un contenitore sul nuovo ponte con la networking routed dovrebbe essere in grado di accedere al gateway e Internet
docker run --net=name0 --rm busybox \ sh -c "ip ad sh && ping -c 4 88.99.114.17 && wget api.ipify.org"
Potrebbe essere necessario consentire l'accesso alla substring in iptables, a seconda della policy predefinita FORWARD
iptables -I DOCKER -d 88.99.114.16/28 -j ACCEPT
I servizi della subnet saranno accessibili dal mondo esterno
docker run --net=name0 busybox \ nc -lp 80 -e echo -e "HTTP/1.0 200 OK\nContent-Length: 3\n\nHi\n"
Allora fuori
○→ ping -c 2 88.99.114.18 PING 88.99.114.18 (88.99.114.18): 56 data bytes 64 bytes from 88.99.114.18: icmp_seq=0 ttl=63 time=0.527 ms 64 bytes from 88.99.114.18: icmp_seq=1 ttl=63 time=0.417 ms --- 88.99.114.18 ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.417/0.472/0.527/0.055 ms ○→ curl 88.99.114.18 Hi
Nessuna necessità di mapping dell'interface macvlan.
Come faccio ad eseguire un contenitore utilizzando la networking macvlan quando ho solo indirizzo IP ma non indirizzo mac?
macvlan è utilizzato per mappare un'interface fisica / host in un contenitore. Poiché non si dispone di un'interface fisica per questi indirizzi, sarà difficile mappare uno in un contenitore.