专栏首页容器云生态如何手动给Docker容器设置静态IP

如何手动给Docker容器设置静态IP

要点:

1.首先需要在宿主机上虚拟出来一个真实可用桥接网卡比如br0

2.docker启动的时候默认使用br0进行桥接网络

3.创建docker容器的时候使用--net=none模式

4.手动为每个创建的容器生成静态ip。但是ip每次在重启容器的时候就会失效

这样的方式其实也是必须自己维护一个ip资源池,不然的话可能ip有问题就会导致不能访问

其实还是利用了docker桥接网络的模式,在宿主机创建一对虚拟网卡,然后将一块桥接到本地网桥上,经另外一块网卡通过容器的命名空间绑定到该容器上,然后对容器 命名空间中的网卡进行设置ip。

理解了netns相应的原理之后可以进行模拟实践:

# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
jdk6-tomcat6-sshd-new     latest              ee3e2b60058d        4 days ago          970.3 MB

创建一个无网络环境的容器sshd-test,该容器创建好后默认只会有一个lo回环网口。
# docker run -itd --name sshd-test -h testssh --net=none jdk6-tomcat6-sshd-new 
3ceb61136590f1362be67f1911591d0b3ca41657c6b33f45982b0df4489f5f73

获取该容器的PID为13157,后面会用到
# docker inspect -f "{{.State.Pid}}" 3ceb61136590f1362be67f1911591d0b3ca41657c6 
13157

添加一对虚拟网卡,分别为veth_3ceb6和eth0
# ip link add veth_3ceb6 type veth peer name eth0
将虚拟网卡veth_3ceb6桥接到br0上
# brctl addif br0 veth_3ceb6 
激活veth_3ceb6网卡,并容器内部的网卡eth0绑定到该容器的网络命名空间内
# ip link set veth_3ceb6 up
# ip link set eth0 netns 13157
将该容器的网络命名空间暴露出来
# mkdir -p /var/run/netns
# ln -s /proc/13157/ns/net /var/run/netns/13157 

此时查看该容器就会发现已经多了一块网卡eth0@if850
# docker exec sshd-test ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
849: eth0@if850: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 46:0a:e8:5b:ac:c0 brd ff:ff:ff:ff:ff:ff

查看网络状况,新加的网卡名称为eth0
# docker exec sshd-test ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 46:0A:E8:5B:AC:C0  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

通过netns激活该容器内部的eth0网卡,并添加网络信息
# ip netns exec 13157 ip link set dev eth0 name eth0
# ip netns exec 13157 ip link set eth0 up
# ip netns exec 13157 ip addr add 10.0.0.2/23 dev eth0
# ip netns exec 13157 ip route add default via 10.0.0.254
完成最后的网络信息的添加后,就可以实现给该容器附加一个独立vlan中的网络。

以上操作相当于是手工给容器设置了一个网络栈,并通过netns将可用的IP附加到容器内部,以实现最基本的容器内部固定ip,且和宿主机共享vlan。

参考文档:

https://yaxin-cn.github.io/Docker/docker-container-use-static-IP.html https://www.xiaomastack.com/2015/02/06/docker-static-ip/ http://blog.csdn.net/samxx8/article/details/46776073

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python2.7.12源码编译

    下载python源码包:  https://www.python.org/downloads/release/python-2712/ 下载setupto...

    BGBiao
  • 自动化服务配置管理平台之-Ansible总结

    Ansible架构: ?     ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批...

    BGBiao
  • linux系统性能分析对策

    解决系统性能问题的一般思路 下面从影响操作系统性能的因素、性能优化工具、系统性能评价标准三个方面介绍优化Linux的一般思路和方法。 影响Linux性能的...

    BGBiao
  • 本命的2016年,2017年继续前行

    用户1130025
  • 虚拟机克隆linux centos6.5系统网卡配置图文教程

    作为一个刚刚接触linux系统的小白来说,VMware虚拟机安装好CentOS6.5系统后,纯净的系统多克隆几份出来方便后期做试验。克隆步骤很简单,克隆后出现的...

    砸漏
  • centos服务器主网卡及添加辅助网卡绑定多IP实践演示

    创建主网卡及辅助网卡的多IP 在控制台创建即可 参见:https://cloud.tencent.com/developer/article/1360461

    芷兰云
  • 固态更换,Windows10系统盘迁移踩坑

    这两天买了个1T的固态,替换我之前的256G的PM961。其实879元买了个1T的C2000Pro,好像有点亏,因为这款好像是阿斯加特 an3的套牌了...建议...

    xuing
  • Centos下设置静态IP

    使用VirtualBox装了很多虚拟机,默认采用的DHCP的方式,但是随着虚拟机越来越多以后,这种方式很不方便,所以需要将机器的IP都设置为静态IP

    大江小浪
  • linux手动、自动更改网卡MAC地址的方法

    一块网卡的mac地址在出厂时已经写入,有时候是写入可以擦写的rom中,但是要有相当的专业技术或专业的设备。

    砸漏
  • 25分钟学会使用MySQL基本操作

    双愚

扫码关注云+社区

领取腾讯云代金券