有时候我们在起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
单独起容器的设置。