Home  >  Article  >  Operation and Maintenance  >  Detailed explanation of how to manually add a network bridge with Docker

Detailed explanation of how to manually add a network bridge with Docker

Y2J
Y2JOriginal
2017-05-24 14:25:064022browse

This article mainly introduces how to add a custom network bridge in Docker. The editor thinks it is quite good. Now I will share it with you and give it as a reference. Let’s follow the editor and take a look.

The Docker service process will generate a bridge named docker0 when it is started. The container will be mounted to this bridge by default, but we can add docker startup parameters by adding -b Birdge or change dockerconfig file to choose which bridge to use.

Operating system: centos7

Delete docker0 bridge

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

Customized bridge settings (/etc/sysconfig/network-scripts/ifcfg-br0 file)

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"

Restart the network service

service network restart

View the network bridge

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

Next we need to restart docker, you can start the docker service The following two methods are used during the process:

The first one: -b parameter specifies the network bridge

[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

I don’t know why starting the docker service process like this will block the current terminal ( ︶︿︶), I had to reopen a terminal, and then run a container

[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)

The container successfully used the br0 bridge.

Second: Modify the /etc/sysconfig/docker file

I encountered a little problem when doing this operation, I modified/ etc/sysconfig/docker file

[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"

Then use service docker start to start the docker service, but other_args does not take effect. Under centos7, servicer docker start will still use the systemctl start docker.service command to run, so I opened /usr/lib/systemd/system/docker.service Check

[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

and find that the ExecStart item does not have running parameters, so I changed ExecStart to /usr/bin/docker -d -b br0 -H fd:/ /, run the docker service, start a container and find that the br0 bridge can be used successfully.

I saw a better method on the Internet, change docker.service to the following

[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

At this time, the parameters added in other_args will be effective.

【Related recommendations】

1. Mysql free video tutorial

2. Detailed explanation of innodb_index_stats when importing data Error prompting table primary key conflict

3. What should I do if garbled characters appear when decompressing zip files under Linux?

4. Teach you how to adjust the partition size in Linux

5. How to detect server network status in Linux

The above is the detailed content of Detailed explanation of how to manually add a network bridge with Docker. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn