Docker 容器设置固定IP
学习docker随笔记,之前创建好的容器会有一个桥接的IP,这个IP是随机分配的,不能指定一个固定的IP;
例如:
docker run -itd --network bridge --ip 172.16.1.10 centos7jdk:1.0 /bin/bash通过--ip命令去设置一个指定的IP,但是会提示失败,错误信息如下:
9b622f47f2a47a49ca90465ec3c05414ce416b45c681fd521ebd066e8589d969 docker: Error response from daemon: user specified IP address is supported on user defined networks only.
查看Docker的默认网络
docker network ls NETWORK ID NAME DRIVER SCOPE 52d1907330b9 bridge bridge local 784321d57807 host host local eeea160d2ac5 none null local
这时会返回三个网络,分别是bridge、host、none
1.bridge:桥接网络,docker启动容器默认使用的就是bridge,每次Docker容器重启时,会按照顺序获取IP地址,所以这个IP地址在docker重启后就变了。
2.host:主机网络:可以使用--network=host进行指定,指定后这个容器的网络会附属在主机上,也就是公用一个IP,端口;比如容器内使用了443端口,那么主机的443也会映射到容器上。
3.none:无指定网络,也是使用--network=none进行指定,一旦进行指定,docker容器不会分配局域网IP。
创建一个自定义的网络
这个网络可以自定义IP,同时也可以指派固定IP给docker容器。
1.创建一个自定义的网络:
创建并指定要一个网段:172.16.0.1/16
输入一下命令:
docker network create --subnet=172.16.0.1/16 testnetwork
得到一下串,说明创建成功
77830cd002cee4d3ae1f8c4387575e2ae5a093d60de1f7f2d18c0b4fad9584b8
查看docker下的网络列表
docker network ls
列表如下:
NETWORK ID NAME DRIVER SCOPE 52d1907330b9 bridge bridge local 784321d57807 host host local eeea160d2ac5 none null local 77830cd002ce testnetwork bridge local
2.创建指定网络的容器
docker run -itd --network testnetwork --ip 172.16.1.10 centos7jdk:1.0 /bin/bash
进入容器,查询容器IP
如果没有相关查询IP的命令,可以yum install initscripts进行安装,在使用ip addr命令
# ip addr 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 8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:10:01:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.16.1.10/16 brd 172.16.255.255 scope global eth0 valid_lft forever preferred_lft forever
可以看到这时的IP已经是我们指定的了。可以关闭容器再次进入查看IP是否有变化。