我正在尝试为容器提供可路由的IP。我的本地网络是192.168.1.0/24,我想使用192.168.1.17/29来提供容器。
目标是让每个容器都有自己的IP。这样,如果两个容器在端口80上运行Web服务器,我可以通过端口80上的唯一IP直接从本地网络上的任何其他主机访问它们,而不是将它们映射到共享主机IP上的不同端口。 / p>
类似于具有自己的网卡的物理机器在网络上各自具有不同的192.168.1.xxx IP。
我试过了:
docker network create --subnet 192.168.1.0/24 --ip-range 192.168.1.17/29 --gateway 192.168.1.1 test_nw
产生以下结果:
$ docker network inspect test_nw
[
{
"Name": "test_nw",
"Id": "96bd574300059ef3710527a9bd0b3010d3b3c22d8de321ff459697eda96ab5e6",
"Created": "2017-12-06T21:50:08.591070587-05:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.1.0/24",
"IPRange": "192.168.1.17/29",
"Gateway": "192.168.1.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
在这种情况下,从容器内部,我可以ping 192.168.1.1,但我不能在互联网上ping任何东西(通过IP或主机名。),我甚至无法ping其他设备在本地网络上(192.168.1.2存在但无法访问)
主机(我的笔记本电脑)无法再访问互联网或本地网络上的任何内容,直到我使用docker network rm
删除此网络。
答案 0 :(得分:0)
这样,如果两个容器在端口80上运行Web服务器,我可以通过端口80上的唯一IP直接从本地网络上的任何其他主机访问它们,而不是将它们映射到共享主机IP上的不同端口。
我想也许你正在考虑这个问题。您不必将它们映射到共享主机IP上的不同端口。解决此问题的最常见方法是为主机分配多个IP地址。例如,如果我的主机是192.168.1.100
,我可能会添加一些其他地址:
ip addr add 192.168.1.200/24 dev eth0
ip addr add 192.168.1.201/24 dev eth0
现在我可以启动一个网络服务器并将其绑定到第一个IP地址:
docker run -p 192.168.1.200:80:80 mywebserver1
我可以启动另一个网络服务器并将其映射到另一个地址的端口80:
docker run -p 192.168.1.201:80:80 mywebserver2
这似乎符合你的目标。