Docker容器的互聯
一、docker容器互聯的預設方式
在同一個宿主機下,docker的容器是通過虛擬網橋來進行連線的,在預設情況下在同一宿主機中執行的docker容器都是可以互相連線的,docker提供一個允許容器互相連線的選項:
–icc=true 預設,表示docker允許容器的互相連線
容器的ip地址是一個不可靠的連線,因為它會隨著容器的重啟而改變,如果我們在docker上提供了一些服務,那麼這些服務如果以ip地址的方式來連線,就會在容器重啟時失效,這是我們不希望看到的情況,而docker為了避免這種情況提供了另外的一種方式,這就是容器啟動時的link選項:
–link
語法:
run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMOND]
示例:
1.啟動容器cct3,關聯容器cct1,別名webtest
docker run -it --name cct3 --link=cct1:webtest e2da955a5469
注意:在容器cct3內部使用env命令檢視,cct3使用在很多地方webtest作為環境變數。
二、拒絕所有容器間的互聯
Docker守護程序的啟動選項
–icc=false
Ubuntu 作業系統請使用如下步驟:
步驟1、使用命令:vi /etc/default/docker修改docker的啟動檔案,在檔案末尾追加
DOCKER_OPTS="–icc=false"
步驟2、重啟docker服務,命令如下:
service docker restart
Centos7 作業系統請使用如下步驟:
步驟1、使用命令:vi /etc/docker/daemon.json編輯daemon.json新增如下內容:
{
…
“icc”: false,
…
}
步驟2、使用命令:systemctl restart docker重啟docker;
注意:此時直接ping容器的ip地址或者ping新增link選項的容器都不通。
三、允許特定容器間的連線
Docker守護程序的啟動選項
–icc=false --iptables=true
–link 在容器啟動時新增link
docker利用iptables中的機制,在icc=false時,阻斷所有的docker容器間的訪問,僅僅執行利用link選項配置的容器進行相互的訪問。
注: 如果出現ping不通的情況,可能為iptables的問題(DROP規則在docker之前了)。
Ubuntu 作業系統請使用如下步驟:
步驟1、使用命令:vi /etc/default/docker修改docker的啟動檔案,在檔案末尾追加
DOCKER_OPTS="–icc=false --iptables=true"
步驟2、重啟docker服務,命令如下:
service docker restart
sudo iptables -L -n 檢視iptables規則的情況
sudo iptables -F 清空iptables規則設定
sudo service docker restart 重新啟用docker的服務
sudo iptables -L -n 再來檢視iptables的設定,docker的規則鏈已經在第一位
Centos7 作業系統請使用如下步驟:
步驟1、使用命令:vi /etc/docker/daemon.json編輯daemon.json新增如下內容:
{
...
"icc": false,
"iptables": true,
...
}
步驟2、使用命令:systemctl restart docker重啟docker;
注意:在centos7中沒有成功,不確定是不是docker的bug