本文主要使用docker network进行ip的配置(本文主要使用一个容器来试验)
1、创建一个简单容器,并查看它的详细信息
1.1 创建容器
1.2 查看IP信息
2、查看docker 网络信息
2.1 查看docker网络列表
图中bridge是我这里docker的默认桥接网络,通过查看网络详细信息我们可以发现,我们的test容器使用的是bridge如下:
[root@192 ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "40b01687a277bf4622dc67bd454eb1f9d6bbab6bf0c547843254c852b680661d",
"Created": "2023-06-16T20:22:32.094125218+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"b015805631839406a7ef4ced2b2cd810dc6b7a08d26f02792858598eec436a46": {
"Name": "test",
"EndpointID": "d4ddc395b7185a61b0a4008f28286c74bf701493357225656a363bfe8f80e99c",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
而我们尝试修改test的ip时,系统会指出“用户指定的IP地址仅在用户定义的网络上支持”,如下图:
所以如果我们要指定容器的ip,我们就要使用自己定义的网络。(同时,当我们使用自己定义的网络但是没有分配指定ip的时候,ip的分配将由容器依照容器启动的顺序,在对应的网段内从2开始往后分配)。
3、自定义容器网络
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 test
--driver 设置网络模式, bridge 为桥接模式(可以不写,默认为桥接)
Docker有四种网络模式 host:容器和主机共享一个网络。 container:容器和另外一个容器共享一个网络。 none:不进行网络连接。 bridge:默认配置,桥接模式。
--subnet 设置网段(可以不写,默认为当前所有网段中数值上最大的网段+1的网段,比如当前数值上最大的网段是172.20.0.0/16,则不写的话默认为172.21.0.0/16)
172.18.0.0/16 主机部分全0
--getway 设置网关(可以不写,不写的话,就没有)
172.18.0.1 一般是主机部分的数值从1开始递增,有n个网关,按理就是172.18.0.2
到172.18.0.n(n<256)
4、配置ip
此时ip为空是因为当前容器还没有打开,只有当容器打开的时候,docker才会开始给容器分配ip,而当ip没有被定义的时候,一般ip默认是从2开始依次递增(一般网关主机部分的数值是1)。
ps:docker自动分配是基于当前网络中的ip的,而我们自定义ip是固定的,也就是说,如果你定义了172.18.0.2这个ip,而当有一个容器的ip是由docker自动分配的时候,此时如果自定义ip的容器没开启的话,docker分配的ip依旧是从172.18.0.2开始,而因为这两个ip相同,所以如果先开启docker自动分配ip的容器,我们自定义ip的容器在开启的时候就会发生ip冲突从而启动失败。
5、测试
我们从起docker再打开test查看进行测试
如此,我们就配好固定ip啦
6、常见问题
序号报错翻译理由解决方法1Error response from daemon: User specified IP address is supported on user defined networks only来自守护进程的错误响应:用户指定的IP地址仅在用户定义的网络上支持我们只能指定在我们自定义的网络上支持的IP无,但是如果只是为了配置固定ip,可以自定义网络进行配置2Error response from daemon: Address already in useip地址已在被使用
1、自定义的ip已被分配,可能是自动分配的时候分配掉的
2、在修改容器ip时,如果容器此时开着,并且修改的网段与当前网段一致,也会有可能出现这个问题
1、先开启自定义ip的容器
2、先关闭容器,并断开网段,否则修改可能会不起作用。
6.1 ip无法被自定义
6.2 ip冲突
6.3 等等等系列问题……
错误待开发
版权归原作者 D双标 所有, 如有侵权,请联系我们删除。