Docker容器分配静态IP

Studio环境libvirt静态分配IP 为KVM虚拟机配置了静态IP地址,是通过调整Libvirt的DHCP分配IP地址实现的。在 Studio Atlas 环境中,同样,也有部分Dcoker容器需要分配静态IP地址,以便运行基础服务。

备注

在本案例中,我想部署3个Ceph容器节点,提供分布式存储给OpenStack集群使用,所以需要分配静态的IP地址。

参考 Assign static IP to Docker container 步骤如下:

  • 创建自己的docker网络:

    docker network create --subnet=172.18.0.0/16 ceph-net
    

上述命令领创建了一个随机命名的bridge:

bridge name    bridge id        STP enabled    interfaces
br-58de6f145577        8000.0242723272a0    no

备注

为了能够更好区别

  • 在从镜像创建容器时添加 --net ceph-net 参数,并指定静态IP --ip 172.18.0.11 作为容器的IP地址:

    docker run --net ceph-net --ip 172.18.0.11 -it ubuntu bash
    

完整实践命令如下:

docker run --net ceph-net --ip 172.18.0.11 -it -d \
  --hostname ceph-node1 --name ceph-node1 -v data:/data ubuntu:latest /bin/bash

我发现我很久以后忘记了自己曾经做过Docker静态IP地址的实践,在 修复kind集群重启异常 还折腾了很久, kind(本地docker模拟k8s集群) 也需要固定IP地址才能在不断重启中保持运行。

备注

docker network connect 文档说明了链接容器到网络的方法:

  docker network cnnnect [OPTIONS] NETWORK CONTAINER

以上命令 ``[OPTIONS]`` 可以是类似 ``--ip 172.17.0.11`` ,当链接容器到一个网络,就可以和连接到同一个网络到其他容器通讯。并且启动时也能指定连接的网络和IP地址,即使用 ``docker run`` 指令,类似如上。

备注

Docker只允许在自创建的docker网络上设置静态IP地址,默认的3个内置docker网络不允许使用 --ip 参数

参考