Docker如何添加自定义网桥
Docker服务进程在启动的时候会生成一个名为docker0的网桥,容器默认都会挂载到该网桥下,但是我们可以通过添加docker启动参数-bBirdge或更改docker配置文件来选择使用哪个网桥。
操作系统:centos7
删除docker0网桥
servicedockerstop//关闭docker服务 iplinksetdevdocker0down//关闭docker0网桥 iplinkdeldevdocker0//删除docker0网桥
自定义网桥设置(/etc/sysconfig/network-scripts/ifcfg-br0文件)
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"
重启网络服务
servicenetworkrestart
查看网桥
[black@testopt]$brctlshow bridgenamebridgeidSTPenabledinterfaces br08000.32e7297502beno virbr08000.000000000000yes
接下来我们需要重新启动docker,可以在启动docker服务进程时使用以下两种方式:
第一种:-b参数指定网桥
[root@testopt]#docker-d-bbr0 INFO[0000]ListeningforHTTPonunix(/var/run/docker.sock) INFO[0000][graphdriver]usingpriorstoragedriver"devicemapper" WARN[0000]Runningmodprobebridgenf_natfailedwithmessage:,error:exitstatus1 INFO[0000]Loadingcontainers:start. ...... INFO[0000]Loadingcontainers:done. INFO[0000]Daemonhascompletedinitialization INFO[0000]Dockerdaemoncommit=786b29dexecdriver=native-0.2graphdriver=devicemapperversion=1.7.1
不知道为什么这样启动docker服务进程会阻塞当前终端(︶︿︶),只好重新开一个终端,然后运行一个容器
[root@testshell]#dockerrun-ti--rmcentos:latest [root@3c6874559411/]#ifconfig eth0Linkencap:EthernetHWaddr02:42:0A:0A:0A:01 inetaddr:10.10.10.1Bcast:0.0.0.0Mask:255.255.255.0 inet6addr:fe80::42:aff:fe0a:a01/64Scope:Link UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1 RXpackets:5errors:0dropped:0overruns:0frame:0 TXpackets:6errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:0 RXbytes:418(418.0b)TXbytes:508(508.0b)
容器成功使用br0网桥。
第二种:修改/etc/sysconfig/docker文件
我在进行这种操作的时候遇到了一点问题,我修改了/etc/sysconfig/docker文件
[root@testopt]#vi/etc/sysconfig/docker #/etc/sysconfig/docker # #Otherargumentstopasstothedockerdaemonprocess #Thesewillbeparsedbythesysvinitscriptandappended #totheargumentslistpassedtodocker-d other_args="-bbr0"
接着使用servicedockerstart启动docker服务,但是other_args并不生效,在centos7下servicerdockerstart仍然会采用systemctlstartdocker.service命令来运行,于是我就打开/usr/lib/systemd/system/docker.service查看
[root@testopt]#vi/lib/systemd/system/docker.service [Unit] Description=DockerApplicationContainerEngine Documentation=https://docs.docker.com After=network.targetdocker.socket Requires=docker.socket [Service] ExecStart=/usr/bin/docker-d-Hfd:// MountFlags=slave LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity [Install] WantedBy=multi-user.target
发现ExecStart一项并没有运行参数,于是将ExecStart改为/usr/bin/docker-d-bbr0-Hfd://,运行docker服务,启动一个容器发现能够成功使用br0网桥。
在网上看到了一种更好的方法,将docker.service改为如下
[black@test~]$vi/usr/lib/systemd/system/docker.service [Unit] Description=DockerApplicationContainerEngine Documentation=https://docs.docker.com After=network.targetdocker.socket Requires=docker.socket [Service] EnvironmentFile=-/etc/sysconfig/docker ExecStart=/usr/bin/docker-d$other_args-Hfd:// MountFlags=slave LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity [Install] WantedBy=multi-user.target
这个时候在other_args中添加的参数就有效了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。