Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Ausführliche Erklärung zum manuellen Hinzufügen einer Netzwerkbrücke mit Docker

Ausführliche Erklärung zum manuellen Hinzufügen einer Netzwerkbrücke mit Docker

Y2J
Y2JOriginal
2017-05-24 14:25:064122Durchsuche

In diesem Artikel wird hauptsächlich das Hinzufügen einer benutzerdefinierten Netzwerkbrücke in Docker vorgestellt. Der Herausgeber findet es ziemlich gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf

Wenn der Docker-Dienstprozess startet, generiert er eine Netzwerkbrücke mit dem Namen docker0. Der Container wird standardmäßig auf dieser Brücke gemountet, aber wir können Docker-Startparameter -b hinzufügen Birdge oder ändern Sie die Docker-Konfigurationsdatei, um auszuwählen, welche Bridge verwendet werden soll.

Betriebssystem: centos7

Docker0 Bridge löschen

service docker stop //关闭docker服务 
ip link set dev docker0 down //关闭docker0网桥  
ip link del dev docker0    //删除docker0网桥

Benutzerdefinierte Bridge-Einstellungen (/etc/sysconfig/network-scripts/ wenncfg-br0-Datei)

DEVICE="br0" 
ONBOOT="yes" 
TYPE="Bridge" 
BOOTPROTO="static" 
IPADDR="10.10.10.20" 
NETMASK="255.255.255.0" 
GATEWAY="10.10.10.20" 
DEFROUTE="yes" 
NM_CONTROLLED="no"

Netzwerkdienst neu starten

service network restart

Netzwerkbrücke anzeigen

[black@test opt]$ brctl show 
bridge name   bridge id        STP enabled   interfaces 
br0       8000.32e7297502be    no        
virbr0     8000.000000000000    yes

Als nächstes müssen wir neu starten Wenn Sie Docker starten, können Sie beim Starten des Docker-Dienstprozesses die folgenden zwei Methoden verwenden:

Erste Methode: -b-Parameter gibt die Brücke an

[root@test opt]# docker -d -b br0 
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)  
INFO[0000] [graphdriver] using prior storage driver "devicemapper"  
WARN[0000] Running modprobe bridge nf_nat failed with message: , error: exit status 1  
INFO[0000] Loading containers: start.           
...... 
INFO[0000] Loading containers: done.           
INFO[0000] Daemon has completed initialization      
INFO[0000] Docker daemon   commit=786b29d execdriver=native-0.2 graphdriver=devicemapper version=1.7.1

Ich nicht Ich weiß nicht, warum das Starten des Docker-Service-Prozesses auf diese Weise das aktuelle Terminal blockiert (︶︿︶), also muss ich ein Terminal erneut öffnen und dann einen Container ausführen

[root@test shell]# docker run -ti --rm centos:latest 
[root@3c6874559411 /]# ifconfig 
eth0   Link encap:Ethernet HWaddr 02:42:0A:0A:0A:01  
     inet addr:10.10.10.1 Bcast:0.0.0.0 Mask:255.255.255.0 
     inet6 addr: fe80::42:aff:fe0a:a01/64 Scope:Link 
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
     RX packets:5 errors:0 dropped:0 overruns:0 frame:0 
     TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 
     collisions:0 txqueuelen:0  
     RX bytes:418 (418.0 b) TX bytes:508 (508.0 b)

Der Container verwendet erfolgreich die br0-Brücke .

Zweitens: Ändern Sie die Datei /etc/sysconfig/docker

Bei diesem Vorgang ist ein kleines Problem aufgetreten. Ich habe /etc/sysconfig/docker geändert Datei

[root@test opt]# vi /etc/sysconfig/docker  
# /etc/sysconfig/docker 
# 
# Other arguments to pass to the docker daemon process 
# These will be parsed by the sysv initscript and appended 
# to the arguments list passed to docker -d 
 
other_args="-b br0"

Dann verwenden Sie service docker start, um den Docker-Dienst zu starten, aber other_args wird nicht wirksam. Unter Centos7 verwendet servicer docker start weiterhin den Befehl systemctl start docker.service, um ihn auszuführen Öffnen Sie /usr/lib/systemd/system/docker.service und überprüfen Sie

[root@test opt]# vi /lib/systemd/system/docker.service  
[Unit] 
Description=Docker Application Container Engine 
Documentation=https://docs.docker.com 
After=network.target docker.socket 
Requires=docker.socket 
[Service] 
ExecStart=/usr/bin/docker -d -H fd:// 
MountFlags=slave 
LimitNOFILE=1048576 
LimitNPROC=1048576 
LimitCORE=infinity 
 
[Install] 
WantedBy=multi-user.target

und stellen Sie fest, dass das ExecStart-Element keine Laufparameter hat, also ändere ich ExecStart in /usr/bin/docker -d -b br0 - H fd://, führen Sie den Docker-Dienst aus, starten Sie einen Container und stellen Sie fest, dass die br0-Brücke erfolgreich verwendet werden kann.

Ich habe im Internet eine bessere Methode gesehen: Ändern Sie docker.service wie folgt

[black@test ~]$ vi /usr/lib/systemd/system/docker.service  
[Unit] 
Description=Docker Application Container Engine 
Documentation=https://docs.docker.com 
After=network.target docker.socket 
Requires=docker.socket 
[Service] 
EnvironmentFile=-/etc/sysconfig/docker 
ExecStart=/usr/bin/docker -d $other_args -H fd:// 
MountFlags=slave 
LimitNOFILE=1048576 
LimitNPROC=1048576 
LimitCORE=infinity 
 
[Install] 
WantedBy=multi-user.target

Zu diesem Zeitpunkt sind die in other_args hinzugefügten Parameter wirksam.

[Verwandte Empfehlungen]

1. Kostenloses MySQL-Video-Tutorial

2. Detaillierte Erklärung von innodb_index_stats beim Importieren von Daten Fehler beim Primärschlüsselkonflikt in der Eingabeaufforderungstabelle

3. Was soll ich tun, wenn beim Dekomprimieren von ZIP-Dateien unter Linux verstümmelte Zeichen angezeigt werden?

4.

Lernen Sie, wie Sie die Partitionsgröße unter Linux anpassen

5.

Wie erkennt Linux Servernetzwerkbedingungen

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum manuellen Hinzufügen einer Netzwerkbrücke mit Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn