docker容器之设置固定ip起容器

有时候我们在起docker容器的时候,并不想用docker默认的ip,而是自己划分网络,起特定的ip地址,有没有办法呢?

docker的强大之处就是,很多功能都是可以自己定制。通过docker network命令轻松实现固定ip启动容器。

下面介绍下如何使用命令。

我们先来看看docker network命令:

root@ubuntu:~# docker network

Usage:	docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network # 新建网络
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

通过帮助文档可以看出,我们可以通过docker network create命令新建网络。

接下来看看具体如何新建:

oot@ubuntu:~# docker network create --help

Usage:	docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which copying the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment # 创建网络常用到的选项

接下来新建网络:

# 新建网络,命名为“test”
root@ubuntu:~# docker network create --subnet 172.238.238.0/24 test 
71ed50127be75d9621c239b9466a62a75f8f408664cf356eacf4bd442a613f95

# 查看`docker`网桥列表
root@ubuntu:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
044fd8fce62e        bridge              bridge              local # docker默认
57617203eaf6        host                host                local
f96e1770874a        none                null                local
71ed50127be7        test                bridge              local # 新建

# 查看刚新建的网桥`ip`
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 # 系统默认
    link/ether 00:0c:29:0b:77:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.255.140/24 brd 192.168.255.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe0b:7711/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default  # docker默认
    link/ether 02:42:86:51:43:9d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:86ff:fe51:439d/64 scope link 
       valid_lft forever preferred_lft forever
33: br-71ed50127be7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:1b:d7:5f:4d brd ff:ff:ff:ff:ff:ff
    inet 172.238.238.1/24 brd 172.238.238.255 scope global br-71ed50127be7   # 刚刚创建的网络
       valid_lft forever preferred_lft forever

再接下来,我们就可以根据新建的docker 网桥在起容器的时候固定ip了:

docker run -td --name container_name --net test --ip 172.238.238.100 imageID[image_name:tag] bash
# 指定容器名称,指定网桥,指定ip,后台运行

再次确认容器的ip:

docker inspect container_name[container_id] | tail -20

当然也可以通过docker-compose.yaml文件进行设置,这里不做讲解,上述介绍适合于docker run 单独起容器的设置。

原文地址:https://www.cnblogs.com/davis12/p/14518691.html