给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