Docker自身的4種網絡工做方式,簡略說明下:
host模式,使用--net=host指定。docker
container模式,使用--net=container:NAME_or_ID指定。centos
none模式,使用--net=none指定。網絡
bridge模式,使用--net=bridge指定,默認設置。code
能夠經過命令docker network ls查看。具體細節自行查閱官方文檔。ip
由於docker的這四種網絡都禁止用戶爲容器指定固定ip,因此須要本身建立網絡。路由
docker network create --subnet=172.172.0.0/24 docker-br0
執行上述建立語句,再次執行docker network ls,docker network列表中多了咱們剛建立的自定義網絡,ip段能夠本身定義,/24 是子網掩碼。開發
有了自定義網卡,咱們就能夠爲新啓動的容器指定固定ip了。文檔
docker run -itd --net=docker-br0 --ip 172.172.0.101 --name init busybox docker exec -it init /bin/sh
進入容器後執行虛擬機
ifconfig
分配了咱們指定的172.172.0.101。it
舉個實際場景。
個人開發環境是mac,在mac上安裝了centos虛擬機,而後在這臺centos上安裝了docker,並啓動了剛纔的docker容器。
docker容器內是能夠ping同mac的IP,可是mac是沒法ping通docker容器的。
因此咱們須要將全部訪問容器ip段(172.172.0.0/24)的鏈接都交由虛擬機(centos)進行路由。
執行如下命令
ip route add 172.172.0.0/24 via 10.1.10.95 dev en4
10.1.10.95是虛擬機centos的ip地址。en4是mac上的網卡(能夠經過ifconfig查看)。
mac上沒有ip這個命令,須要單獨安裝:
brew install iproute2mac
查看剛添加好的路由
ip route
若是要刪除
ip route del 172.172.0.0/24
好了,如今能夠ping同剛建立的容器了
相信看到這裏,應該明白怎麼將容器IP「暴露」出去了。