給docker容器分配靜態ip地址


給docker容器分配靜態ip地址
原創 這個名字想了很久 最后發布於2017-06-17 14:25:48 閱讀數 6460 收藏
展開

原文地址,轉載請注明出處:http://blog.csdn.net/qq_34021712/article/details/73350738    ©王賽超
前言:

docker容器可以認為就是一台虛擬機,一台服務器,外界想要訪問這台服務器,肯定要設置一個ip地址,否則無法訪問到該容器。

docker run啟動一個container的命令有一個--net的參數用於指定container的網絡類型

           docker網絡解釋參考:https://segmentfault.com/a/1190000000669312
操作過程:

docker默認使用'bridge'來設置container的網絡模式(即從與docker0同網段的未使用的IP中取一個作為container的IP)

我們這里使用'none'來實現自己手動配置container的網絡

第一步:安裝網橋設備
yum install -y bridge-utils

第二步:給宿主機創建網橋
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
將 以前的ip 網關, dns之類的全部注釋掉BOOTPROTO=none 然后最后加上BRIDGE=br-ex    br-ex可以隨便起

    TYPE=Ethernet
    BOOTPROTO=none
    #BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME=eno0
    UUID=5107e5c5-5e39-4a81-a085-e4ccf9775c4a
    ONBOOT=yes
    #IPADDR=192.168.0.200
    #NETMASK=255.255.255.0
    #PREFIX0=24
    #GATEWAY=192.168.0.254
    #DNS1=114.114.114.114
    #DNS2=114.114.114.115
    HWADDR=00:0C:29:03:1C:C0
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    BRIDGE=br-ex

第三步:設置物理網卡橋接到網橋

vi /etc/sysconfig/network-scripts/ifcfg-br-ex

    TYPE=Bridge
    BOOTPROTO=static
    IPADDR=192.168.0.200
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
    PREFIX=24
    DNS1=114.114.114.114
    DNS2=114.114.114.115
    NAME=br-ex
    ONBOOT=yes
    DEVICE=br-ex

以上修改即為設置IP,設置完畢可以通過命令service network restart重啟網絡

使用 brctl show查看
[root@bogon ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-ex           8000.000c29031cc0       no              eno16777736
docker0         8000.024233eb8bc4       no

第四步:啟動docker容器並指定網絡模式為none
查看鏡像
[root@bogon ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              3bee3060bfc8        8 days ago          192.5 MB

注意:使用鏡像 啟動一個容器 設置網絡模式為none
docker run -i -d --net=none --name javadocker -v /usr/local/software/:/mnt/software/ 3bee3060bfc8 /bin/bash

第五步:獲取pipework可執行程序

①如果未安裝wget使用以下命令安裝(安裝可以忽略)
yum -y install wget

②如果未安裝 zip解壓使用以下命令安裝(安裝可以忽略)
yum install -y unzip zip

③安裝pipework
# wget https://github.com/jpetazzo/pipework/archive/master.zip
# unzip master.zip
# cp pipework-master/pipework  /usr/local/bin/
# chmod +x /usr/local/bin/pipework
如果無法wget獲取,點此處下載

第六步:使用pipework給docker容器分配ip

pipework 網橋 容器名稱 ip@網關

pipework br-ex javadocker 192.168.0.220/24@192.168.0.254

重啟容器后需要再次指定。

第七步:測試ip是否可用

[root@bogon util]# ping 192.168.0.220
PING 192.168.0.220 (192.168.0.220) 56(84) bytes of data.
64 bytes from 192.168.0.220: icmp_seq=1 ttl=64 time=1.43 ms
64 bytes from 192.168.0.220: icmp_seq=2 ttl=64 time=0.208 ms
64 bytes from 192.168.0.220: icmp_seq=3 ttl=64 time=0.755 ms
64 bytes from 192.168.0.220: icmp_seq=4 ttl=64 time=0.124 ms

64 bytes from 192.168.0.220: icmp_seq=5 ttl=64 time=0.961 ms

第八步:進入docker容器,查看ip

docker exec -it 容器id /bin/bash  如:docker exec -it 6a45948a039e /bin/bash

centos7之后 已經改為使用ip addr 查看網絡情況

[root@6a45948a039e /]# ip addr
bash: ip: command not found

如果報bash: ip: command not found 可能是因為鏡像最小安裝,沒有安裝iproute

解決方法:yum install iproute iproute-doc

如果想在centos7中使用ipconfig命令,可以安裝net-tools

解決方法:yum install net-tools
————————————————
版權聲明:本文為CSDN博主「這個名字想了很久」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34021712/java/article/details/73350738


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM