如何使用Docker创build覆盖networking?

当我尝试使用Docker创build覆盖networking时,出现以下错误:

docker@boot2docker:/vagrant$ docker network create --driver overlay somenetwork Error response from daemon: failed to parse pool request for address space "GlobalDefault" pool "" subpool "": cannot find address space GlobalDefault (most likely the backing datastore is not configured)` 

我在GitHub上发现了这个bug报告: https : //github.com/docker/docker/issues/18770

我检查了我的Boot2Docker镜像,它使用的是sysvinit而不是systemd,所以这不应该是一个问题,而且内核版本似乎是好的:

 docker@boot2docker:/vagrant$ uname -r 4.1.19-boot2docker 

是否有可能这是滥用覆盖networking概念,我试图运行这只在一个主机上…? 也许这会导致奇怪的错误?

更新:我认为执行networking创build命令到本地运行的docker守护进程是错误的。 我认为我应该这样做,而不是我的swarm经理 – 在这种情况下,错误消息是不同的:

 docker@boot2docker:~$ docker -H tcp://0.0.0.0:3375 network create --driver overlay network Error response from daemon: No healthy node available in the cluster 

当我检查群集的状态时,确实没有节点。 也许原来的问题是我的群连接命令是不完全正确的?

 docker run -d swarm join consul://127.0.0.1:8500/ 

如果你仔细阅读覆盖networking的文档 ,你会发现为了创build一个覆盖networking,你首先需要configuration一个键/值存储(Docker目前支持etcd,consul和zookeeper),Docker使用它来协调多个主机之间的事情。

从文档:

要创build覆盖networking,可以在每个Docker引擎上的守护进程上configuration选项以用于覆盖networking。 有三个选项可供select:选项说明

  • --cluster-store=PROVIDER://URL

    介绍KV服务的位置。

  • --cluster-advertise=HOST_IP|HOST_IFACE:PORT

    用于集群的HOST的IP地址或接口。

  • --cluster-store-opt=KEY-VALUE OPTIONS

    诸如TLS证书或调优发现定时器之类的选项

从你的问题,这听起来不像你已经执行了必要的configuration。

正如更新build议..

.. 问题是 ..

你的swarm连接命令。

解决scheme可以是..

 docker run swarm join --addr=192.168.196.16:2375 token://`cat swarm_id` 

假设你使用一个标记创build了swarm。 至于我,我宁愿使用静态文件。

你会在这个答案中find你需要的一切。