使用pipework为配置Docker容器固定ip

时间:2024-03-16 18:30:51

docker的四种网络模式

    1. host模式
        docker run 使用 --net=host指定, docker使用的网络实际上和宿主机一样

    2. container模式
        使用 --net=container:container_id/container_name, 多个容器使用共同的网络,看到的ip是一样的。    
    3. none 模式
        使用 --net=none指定,这种模式下,不会配置任何网络。

    4. bridge模式
        使用 --net=bridge指定,默认模式,此模式会为每个容器分配一个独立的network namespace
        默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址
================================================================


首先讲一下docker的网络模式:

我们使用docker run创建容器时,可以使用--net选项指定容器的网络模式,docker一共有4中网络模式:

   

1:bridge模式,--net=bridge(默认)。
这是dokcer网络的默认设置。安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址。并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。如下:
docker inspect --format={{.NetworkSettings.IPAddress}} test
 
使用pipework为配置Docker容器固定ip
 

2:host模式,--net=host。
  这个模式下创建出来的容器,将不拥有自己独立的Network Namespace,即没有独立的网络环境。它使用宿主机的ip和端口。

 

3:container模式,--net=container:NAME_or_ID。
这个模式就是指定一个已有的容器,共享该容器的IP和端口。除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的。

 

4:none模式,--net=none。
这个模式下,dokcer不为容器进行任何网络配置。需要我们自己为容器添加网卡,配置IP。


因此,若想使用pipework配置docker容器的ip地址,必须要在none模式下才可以。

pipework安装:  https://github.com/jpetazzo/pipework/archive/master.tar.gz

# wget https://github.com/jpetazzo/pipework/archive/master.zip
# unzip pipework-master.zip
# cp pipework-master/pipework  /usr/local/bin/
# chmod +x /usr/local/bin/pipework
创建none模式的容器,为其分配IP。
#docker run -idt --name test --net=none resin
#pipework docker0 test 172.17.0.100/[email protected]
#docker-enter test
#ip a   (centos7)    or   ifconfig
 
使用pipework为配置Docker容器固定ip
 
以上操作给新建的test容器分配了一个172.17.0.100的IP地址。


Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。