欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Docker如何固定IP设置的方法

程序员文章站 2022-04-25 17:36:13
由于工作需要,需要给docker设置固定ip,在网上的查找了一些资料,自己试着实践一下,留个笔记。 经常用docker模拟项目在生产环境中的部署,往往需要同时开好几台do...

由于工作需要,需要给docker设置固定ip,在网上的查找了一些资料,自己试着实践一下,留个笔记。

经常用docker模拟项目在生产环境中的部署,往往需要同时开好几台docker容器,而且有时安装的软件需要绑定docker局域网中的其他容器,如 mongodb 副本集部署的时候,就需要绑定其他容器的内网ip。

但是,docker 每次重启后,容器的ip地址会变化,查询了资料,docker是支持设置固定ip的。

docker 默认网络

docker安装后,默认会创建下面三种网络类型:

$ docker network ls
network id     name        driver       scope
9781b1f585ae    bridge       bridge       local
1252da701e55    host        host        local
237ea3d5cfbf    none        null        local

启动 docker的时候,用 --network 参数,可以指定网络类型,如:

~ docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash

bridge:桥接网络

默认情况下启动的docker容器,都是使用 bridge,docker安装时创建的桥接网络,每次docker容器重启时,会按照顺序获取对应的ip地址,这个就导致重启下,docker的ip地址就变了

none:无指定网络

使用 --network=none ,docker 容器就不会分配局域网的ip

host: 主机网络

使用 --network=host,此时,docker 容器的网络会附属在主机上,两者是互通的。

例如,在容器中运行一个web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

创建自定义网络:(设置固定ip)

启动docker容器的时候,使用默认的网络是不支持指派固定ip的,如下:

~ docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6
docker: error response from daemon: user specified ip address is supported on user defined networks only.

因此,需要创建自定义网络,下面是具体的步骤:

步骤1: 创建自定义网络

创建自定义网络,并且指定网段:172.18.0.0/16

➜ ~ docker network create --subnet=172.18.0.0/16 mynetwork
➜ ~ docker network ls
network id     name        driver       scope
9781b1f585ae    bridge       bridge       local
1252da701e55    host        host        local
4f11ae9c85de    mynetwork      bridge       local
237ea3d5cfbf    none        null        local

步骤2: 创建docker容器

复制代码 代码如下:

➜  ~ docker run -itd --name networktest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

这个时候,创建的docker容器就会持有 172.18.0.2 这个ip.

[root@ec8e31938fe7 /]# ifconfig
eth0   link encap:ethernet hwaddr 02:42:ac:12:00:02
     inet addr:172.18.0.2 bcast:0.0.0.0 mask:255.255.0.0
     inet6 addr: fe80::42:acff:fe12:2/64 scope:link
     up broadcast running multicast mtu:1500 metric:1
     rx packets:88 errors:0 dropped:0 overruns:0 frame:0
     tx packets:14 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     rx bytes:4056 (3.9 kib) tx bytes:1068 (1.0 kib)

lo    link encap:local loopback
     inet addr:127.0.0.1 mask:255.0.0.0
     inet6 addr: ::1/128 scope:host
     up loopback running mtu:65536 metric:1
     rx packets:0 errors:0 dropped:0 overruns:0 frame:0
     tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1
     rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)

链接

docker container networking

为docker容器指定自定义网段的固定ip/静态ip地址 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。