创建 docker 机器或容器时如何设置特定的固定 IP 地址?
Posted
技术标签:
【中文标题】创建 docker 机器或容器时如何设置特定的固定 IP 地址?【英文标题】:How to set a specific fixed IP address when I create a docker machine or container? 【发布时间】:2015-06-23 23:56:12 【问题描述】:创建容器时,我想在同一个局域网中设置特定容器的 IP 地址。
这可能吗?如果没有,创建后可以修改DHCP IP地址吗?
【问题讨论】:
看看选项--net=host
用于docker daemon 启动选项docs.docker.com/articles/networking/#container-networking
--net=host 给我与我的主机相同的网络,但我想在另一个容器的同一个 LAN 上设置一个特定的 ip,如 176.17.0.18。感谢回复
我刚刚编辑了my answer below,添加了两个有趣的解决方法,允许您为每台 docker 机器指定一个固定的 IP 地址。
我给了这个here的答案
【参考方案1】:
考虑到(现在是 2013 年 10 月)文章“How to configure Docker to start containers on a specific IP address range”的结论,这似乎还不可能(或至少“由 Docker 自动为您完成”) .
2015 年 11 月更新:docker/machine issue 1709 中讨论了类似的问题,其中包括 Tobias Munk (schmunk42
) 为 docker machine 提出的 recent workaround (Nov 2015)
(容器见下一节):
针对某些用例的解决方法可能是创建如下机器:
192.168.98.100
docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.98.1/24" m98
192.168.97.100
docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.97.1/24" m97
192.168.96.100
docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.96.1/24" m96
如果没有其他机器具有相同的cidr (Classless Inter-Domain Routing),则该机器在启动时应始终获得
.100
IP。
另一种解决方法:
(在“How do I create a docker machine with a specific URL using docker-machine and VirtualBox?”中查看我的脚本)
我的 virtualbox 的 dhcp 范围是 192.168.99.100 - 255,我想在 100 之前设置一个 IP。
我发现了一个设置静态 IP 的简单技巧:创建机器后,我运行此命令并重新启动机器:
echo "ifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" \
| docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
此命令创建一个文件
bootsync.sh
,由boot2docker
启动脚本搜索并执行。现在在机器启动期间执行命令并设置静态 IP。
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-1 - virtualbox Running tcp://192.168.99.50:2376 test-1 (mast
Michele Tedeschi (micheletedeschi
)adds
我已经更新了命令:
echo "kill `more /var/run/udhcpc.eth1.pid`\nifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
然后运行命令(仅第一次)
docker-machine regenerate-certs prova-discovery
现在 DHCP 不会更改 IP
(将 prova-discovery
替换为您的 docker 机器的名称)
2015 年 4 月:
文章提到了 create your own bridge 的可能性(但这并没有将其中一个 IP 地址分配给容器):
创建自己的网桥,使用固定地址配置它,告诉 Docker 使用它。完成。
如果您手动执行,它将如下所示(在 Ubuntu 上):
stop docker
ip link add br0 type bridge
ip addr add 172.30.1.1/20 dev br0
ip link set br0 up
docker -d -b br0
要在现有网桥 IP 范围内分配静态 IP,您可以尝试“How can I set a static IP address in a Docker container?”,使用创建网桥和一对对等接口的静态脚本。
2015 年 7 月更新:
上面提到的想法也在“How can I set a static IP address in a Docker container?”中详述:
Building your own bridge结果应该是 Docker 服务器启动成功,现在准备将容器绑定到新的网桥。 暂停以验证网桥的配置后,尝试创建一个容器——您会看到它的 IP 地址在您的新 IP 地址范围内,Docker 将自动检测到该范围。
您可以在启动和停止容器时使用
brctl show
命令查看 Docker 在桥接器中添加和删除接口,并且可以在容器内运行 ip addr 和 ip route 以查看它是否已在网桥的 IP 地址范围,并被告知使用网桥上 Docker 主机的 IP 地址作为其通往 Internet 其余部分的默认网关。
使用以下命令启动 docker:-b=br0
(这也是 echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
默认为您设置的)
使用pipework(以下192.168.1.1为默认网关ip地址):
pipework br0 container-name 192.168.1.10/24@192.168.1.1
【讨论】:
您基于的链接已过时。 @SergeyMNikitin 我已经更新了答案并明确表示第一个链接已过时。以上是关于创建 docker 机器或容器时如何设置特定的固定 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章