docker Pipework配置宿主機(jī)和docker實(shí)例的IP在同一個(gè)網(wǎng)段

摘要: 本文講的是Docker使用自定義網(wǎng)橋docker,并且自定義容器的ip地址。 Docker 服務(wù)默認(rèn)會(huì)創(chuàng)建一個(gè) docker0 網(wǎng)橋,它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機(jī)都放到同一個(gè)物理網(wǎng)絡(luò)。 用戶也可以指定網(wǎng)橋來連接各個(gè)容器。


Docker 服務(wù)默認(rèn)會(huì)創(chuàng)建一個(gè) docker0 網(wǎng)橋,它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機(jī)都放到同一個(gè)物理網(wǎng)絡(luò)。

一、設(shè)置網(wǎng)絡(luò)橋接,步驟如下

1. 首先安裝bridge-utils工具包

$ yum install bridge-utils

然后可以用 “brctl show” 來查看當(dāng)前網(wǎng)橋信息,可以看到目前只有一個(gè) docker0

$ brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.56847afe9799 no

2. 然后創(chuàng)建一個(gè)網(wǎng)橋 br0

$ vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE="br0"

ONBOOT="yes"

TYPE="Bridge"

BOOTPROTO="static"

IPADDR="192.168.31.154"

NETMASK="255.255.255.0"

GATEWAY="192.168.31.1"

DEFROUTE="yes"

NM_CONTROLLED="no"

3. 編輯vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

BRIDGE=br0

4. 編輯 /etc/sysconfig/docker 文件,添加如下Docker參數(shù),是Docker默認(rèn)使用上面新添加的網(wǎng)橋

other_args="-b br0"

5. 重啟網(wǎng)絡(luò)服務(wù)

$ service docker restart

6. 查看配置

$ brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000c29e7dd97 no eth0

新建一個(gè)容器,可以看到它已經(jīng)橋接到了 br0 上了。

6. 最后,如果要?jiǎng)h除網(wǎng)橋,執(zhí)行下邊的命令

$ ip link set dev br0 down

$ brctl addbr br0


二、 Pipework 配置Docker固定IP

我們?cè)谧远x網(wǎng)橋的基礎(chǔ)上去做固定IP配置,Pipework有個(gè)缺點(diǎn)就是給容器指定完固定IP,如果容器重啟,那么固定IP會(huì)消失,還需要重新指定,容器量大時(shí)可寫個(gè)腳本來完成

1. 下載PipeWoke

下載地址:https://github.com/jpetazzo/pipework.git

解壓到/usr/local/bin/,并且加上可執(zhí)行權(quán)限

2. 啟動(dòng)兩個(gè)容器

docker run -itd --name test1 --net=none centos /bin/bash

docker run -itd --name test2 --net=none centos /bin/bash

3. 設(shè)置容器IP

pipework br0 test2 192.168.15.244/24@192.168.15.1

pipework br0 test1 192.168.15.243/24@192.168.15.1

其中@后面的ip為Docker容器宿主機(jī)的網(wǎng)關(guān)

或者是2,3合并執(zhí)行如下的命令:

pipework br0 $(docker run -itd --name test1 --net=none centos /bin/bash) 192.168.31.243/24@192.168.31.1

pipework br0 $(docker run -itd --name test2 --net=none centos /bin/bash) 192.168.31.244/24@192.168.31.1

4. 在rc.local中配置,如下:

vim /etc/rc.d/init.d/rc.local

具體內(nèi)容:

service docker start

docker start test1

docker start test2

pipework br0 test2 192.168.31.244/24@192.168.31.1

pipework br0 test1 192.168.31.243/24@192.168.31.1

當(dāng)然要給rc.local可執(zhí)行權(quán)限:

chmod +x rc.local

另外需要注意的是,在執(zhí)行rc.local的時(shí)候系統(tǒng)里面的path變量沒有初始化完成,所以需要用命令的完全路徑

如果不知道命令路徑位置,使用which,比如 which docker? 就會(huì)顯示docker所在的路徑


三、報(bào)錯(cuò)處理:

在通過pipework 給docker容器分配IP的時(shí)候, 系統(tǒng)報(bào)出以下錯(cuò)誤:

Object "netns" is unknown, try "ip help".

該錯(cuò)誤是由于系統(tǒng)版本暫時(shí)不支持namespaces, 可通過更新內(nèi)核或者iproute的方法獲取對(duì)namespaces的支持.更新方法如下:

添加yum源:

cat /etc/yum.repos.d/rdo.repo

[openstack-kilo]

name=OpenStack Kilo Repository

baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/

skip_if_unavailable=0

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-kilo

## 接下來更新iproute即可:

yum update iproute -y

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 摘要: 本文講的是Docker使用自定義網(wǎng)橋docker, Docker 服務(wù)默認(rèn)會(huì)創(chuàng)建一個(gè) docker0 網(wǎng)橋...
    think_lonely閱讀 3,138評(píng)論 0 2
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機(jī)是訪問不到的。此外,除了...
    R_X閱讀 1,792評(píng)論 0 7
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,531評(píng)論 0 120
  • 一、Docker 簡(jiǎn)介 Docker 兩個(gè)主要部件:Docker: 開源的容器虛擬化平臺(tái)Docker Hub: 用...
    R_X閱讀 4,406評(píng)論 0 27
  • 舉國慶華誕,萬家迎月圓。 國慶逢仲秋,盛世家業(yè)安。 世界那么大,正當(dāng)轉(zhuǎn)一轉(zhuǎn)。 莫忘歸鄉(xiāng)路,闔家大團(tuán)圓。
    二個(gè)人世界閱讀 442評(píng)論 0 0