#sudo apt-get install bridge-utils
新添加一个桥接网卡br0
#sudo brctl addbr br0
修改配置文件加入DOCKER_OPTS="-b=br0" ,使用该桥接网卡启动docker
#sudo vim /etc/default/docker
重启docker
#sudo restart docker
启动一个容器发现ip地址已经使用我们自定义的br0,ip地址为192.168.100.2
使用 --link 参数可以让容器之间安全的进行交互
我们再次创建一个容器httpd2 使用--link选项,并测试两个容器的连通性
--link 参数的格式为 --link name:alias ,其中 name 是要链接的容器的名称, alias 是这个连接的别名。
关闭并重新启动httpd1并查看其地址,发现地址已经改变
我们再用httpd2 测试httpd1的连接,发现地址已自动修正
我们查看一下他的host记录。发现httpd1的ip地址已自动更新
--icc=false
编辑/etc/default/docker ,增加--icc=false,并重启docker
启动容器
连接到httpd2再次测试httpd1,发现网络已经不通
编辑/etc/default/docker ,增加--iptables=true,并重启docker、
进入容器httpd1启动httpd服务
使用httpd2测试httpd1的web服务,是否发现web可以访问呢?
我们来查看一下本地的iptables,发现httpd1的web端口是对httpd2开放的,所以我们可以访问却ping不通
我们再次启动一个httpd3拒绝他访问httpd1的web
是不是发现httpd3无法访问httpd1的web服务呢。有关ubuntu的iptables下节我将介绍一下
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
#sudo docker -it -p 80 --name httpd4 192.168.7.130:5000/httpd
使用docker port 加容器名查看映射端口
也可以自己定义指定端口来映射,如图,我们用8080端口来映射容器的web服务
#sudodocker run -it -p 8080:80 --name httpd5 192.168.7.130:5000/httpd
本地访问测试
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效。
-b BRIDGE or --bridge=BRIDGE --指定容器挂载的网桥
--bip=CIDR --定制 docker0的掩码
-H SOCKET... or --host=SOCKET... --Docker 服务端接收命令的通道
--icc=true|false --是否支持容器之间进行通信
--ip-forward=true|false --请看下文容器之间的通信
--iptables=true|false --禁止 Docker 添加 iptables 规则
--mtu=BYTES --容器网络中的 MTU
下面2个命令选项既可以在启动服务时指定,也可以 Docker 容器启动( docker run )时候指定。在
Docker 服务启动的时候指定则会成为默认值,后面执行 docker run 时可以覆盖设置的默认值。
--dns=IP_ADDRESS... --使用指定的DNS服务器
--dns-search=DOMAIN... --指定DNS搜索域
最后这些选项只有在 docker run 执行时使用,因为它是针对容器的特性内容。
-h HOSTNAME or --hostname=HOSTNAME --配置容器主机名
--link=CONTAINER_NAME:ALIAS --添加到另一个容器的连接
--net=bridge|none|container:NAME_or_ID|host--配置容器的桥接模式
-p SPEC or --publish=SPEC --映射容器端口到宿主主机
-P or --publish-all=true|false --映射容器所有端口到宿主主机
容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。
$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
如果为 0,说明没有开启转发,则需要手动打开。
$sysctl -w net.ipv4.ip_forward=1
如果在启动 Docker 服务的时候设定 --ip-forward=true ,Docker 就会自动设定系统的 ip_forward参数为 1。