2017-02-16 65 views
1

我想爲Docker容器的子網設置IP的自定義池。爲此,我遵循了這一停泊塢窗守護進程,刪除docker0接口和定製NETWORKID更改docker橋的IP地址池

systemctl stop docker 
ip link del docker0 

二手NetworkManager的重建來重建docker0虛擬橋接接口,並把它在。

[email protected] ~> nmcli con up <UID> 
[email protected] ~> ip addr 
111: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 
    link/ether 3e:ff:1b:ce:e4:a4 brd ff:ff:ff:ff:ff:ff 
    inet 172.20.0.1/20 brd 172.20.15.255 scope global docker0 
     valid_lft forever preferred_lft forever 

現在,當我再次開始搬運工守護進程,

[email protected] ~> systemctl start docker 
[email protected] ~> ip addr 
111: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 
    link/ether 3e:ff:1b:ce:e4:a4 brd ff:ff:ff:ff:ff:ff 
    inet 172.17.0.1/16 scope global docker0 
     valid_lft forever preferred_lft forever 

我已經設置子網是172.20.0.1/20但只要我開始泊塢窗守護進程,docker0接口的子網更改爲172.17.0.1/16。我希望訪問局域網中的一些私有IP,位於該子網中。

有沒有更好的方法來配置橋接口?

回答

0

通過創建特定的橋接容器網絡,您應該能夠使用此命令定義IP地址。 documentation是一個很好的入口點。

$ docker network create --driver bridge --subnet 172.20.0.1/20 subnet 
$ docker run --name app --network subnet <container> 

所有容器現在應該在選定的子網中擁有IP地址。

此外,official doc介紹瞭如何創建自己的橋接連接。

1

Jordan的答案創建了一個子網工作,然後在容器上運行應用程序時指定該子網工作。這有助於限制運行容器時使用的IP池。

但是,它並不能幫助限制docker守護進程創建的虛擬網橋接口的IP池。我正在尋找的答案如下:

Docker運行管理容器的守護進程。該守護進程創建一個接口docker0,該接口在默認情況下被配置爲使用172.17.0.1/16子網進行操作。所以,我們需要配置守護進程以使用所需的子網。

dockerd用於運行docker守護進程。它有--bid橋ID選項。 dockerd

dockerd --bid=172.20.0.1/20 

但大多數系統運行碼頭使用各自的服務管理器來實現這一點。在這種情況下,docker在/etc/docker/daemon.json處有一個docker守護程序配置文件。 Docker linux daemon configuration 所以創建daemon.json,如果它不存在並且添加bip

{ 
    "bip":"172.30.0.1/20" 
} 
0

如果更改docker0網橋的子網,它將保持不變。 對於特定的ip目的使用新的網絡創建。 docker network create --subnet = 172.20.0.1/20 foo 在該網絡中運行容器之後。 docker run -itd --net foo image_name 假設你想給container指定ip。使用 docker run -itd --net foo --ip 172.20.0。12 image_name