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】
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!