8

如何修复容器的静态 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?

4

1 回答 1

4

从 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 的唯一方法是通过两个脚本:pipeworkovs-docker

使用 Open vSwitch 作为多托管 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选项都是根据您的需要实际定义虚拟网络。

于 2014-01-23T14:01:58.963 回答