1配置vmware中nat方式上網:
2.虛擬機中安裝centos7,假設通過net方式上網獲得的ip爲192.168.146.128
3.安裝docker,省略
4.啓動一個容器:
docker run -idt --name=slave1 --net=none --privileged ubantu:v0.0.1
5.使用pipework,創建虛擬網橋,並且設置ip和指定網關:
pipework安裝的過程省略:
pipework br0 slave1 192.168.146.141/[email protected]
注意:pipework會自動創建網關,但創建完成網關之後,並沒有爲網關分配ip:
爲網關指定ip:
[root@localhost ~]# ifconfig br0 192.168.146.140
配置完成之後。ping測試:
宿主機ping容器:
容器ping主機:
[root@localhost ~]# docker exec -it slave1 /bin/bash
6.容器不能ping通外網:
由於使用了橋接的使用方式,需要查看防火牆中是否有指定的nat轉發規則:
首先我們從容器ping一下外網:
不能ping通外網:
查看防火牆中nat表的轉發規則:
iptables -t nat -vnL POSTROUTING --line-number
沒有192.168網段的轉發規則,
插入一條規則:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.146.140/16 ! -o br0 -j MASQUERADE
再次查看規則:
再次ping外網:
如果還是ping不通外網,需要檢查本機中的ip轉發是否開啓:
查看ip轉發生否開啓:
sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0
如果顯示0,則表示ip轉發功能沒有開啓,
開啓的辦法:(重啓機器會失效)
sysctl -w net.ipv4.ip_forward=1
永久性的設置辦法:
vi /etc/sysctl.conf
加入:net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
發現一個奇怪的問題。即使宿主機的防火牆關閉狀態,容器ping通外網任然存在問題,
7.主機ping虛擬機中的容器:
將net方式上網的網卡添加到虛擬網橋中:
brctl addif br0 eno50332208,
再次從主機ping虛擬機: