每次我用docker启动容器时,它都会得到不同的IP

每次我用docker启动容器时,它都会得到不同的IP,ip,docker,lxc,Ip,Docker,Lxc,如何修复容器的静态IP 首先,我启动一个容器并检查它,它说 "NetworkSettings": { "IPAddress": "XX.XX.206.98", "IPPrefixLen": 27, "Gateway": "XX.XX.206.105", "Bridge": "public", "PortMapping": null, "Ports": {} }, 然后我停下来,重新开始,就像 "NetworkSettings": { "I

如何修复容器的静态IP

首先,我启动一个容器并检查它,它说

"NetworkSettings": {
    "IPAddress": "XX.XX.206.98",
    "IPPrefixLen": 27,
    "Gateway": "XX.XX.206.105",
    "Bridge": "public",
    "PortMapping": null,
    "Ports": {}
},
然后我停下来,重新开始,就像

"NetworkSettings": {
    "IPAddress": "XX.XX.206.99",
    "IPPrefixLen": 27,
    "Gateway": "XX.XX.206.105",
    "Bridge": "public",
    "PortMapping": null,
    "Ports": {}
},

正如你所看到的,它改变了。我刚刚创建了一个名为public的桥,并用添加的
-b=public
启动docker。如何设置容器的静态IP?

来自DOCKER 1.10上的

# create a new bridge network with your subnet and gateway for your ip block
$ docker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 iptastic

# run a nginx container with a specific ip in that block
$ docker run --rm -it --net iptastic --ip 203.0.113.2 nginx

# curl the ip from any other place (assuming this is a public ip block duh)
$ curl 203.0.113.2
更新

现在获得静态IP的唯一方法是通过两个脚本:或

使用OpenVSwitch作为多主机docker容器的“含电池”版本是一个强有力的方向

注意


这种行为是故意的

在将来的版本中,有一种方法可以更改它

到目前为止,唯一可以做到这一点的方法是回到linux容器:

docker run \
-n=false \
-lxc-conf="lxc.network.type = veth" \
-lxc-conf="lxc.network.ipv4 = 172.16.42.20/24" \
-lxc-conf="lxc.network.ipv4.gateway = 172.16.42.1" \
-lxc-conf="lxc.network.link = docker0" \
-lxc-conf="lxc.network.name = eth0" \
-lxc-conf="lxc.network.flags = up" \
-i -t my_image:my_tag /bin/bash

因此,
-n=false
将禁用自动docker网络,并且所有的
-lxc conf
选项将根据您的需要实际定义虚拟网络。

这不再有效,你能更新你的答案吗?事实上,我看到了两种解决这个问题的方法:没有一种是真正的答案。这确实是一种黑客行为!但这是docker的一个创作者所做的黑客行为,所以这是一个原创的黑客行为(与原罪的意义相同)。最重要的是,它很容易阅读和理解背后发生的事情,这是一个巨大的优势。我也在用它!这是一个重要的特性,假设您有一个作为docker运行的db服务,并且所有JDBCURL都固定到该ip地址。在数据库容器重新启动之后,您必须修改每个JDBCURL。