如何使用Docker创建覆盖网络?

时间:2016-04-02 13:24:06

标签: networking docker docker-compose boot2docker

当我尝试使用Docker创建覆盖网络时,出现以下错误:

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上发现了这个错误报告:https://github.com/docker/docker/issues/18770

我检查了我的Boot2Docker图像,它使用的是sysvinit而不是systemd,所以这不应该是一个问题,而且内核版本看起来也不错:

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

这是否有可能是滥用覆盖网络概念,我尝试仅在一台主机上运行...?也许这会导致奇怪的错误?

更新 我认为对本地运行的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

当我检查群集群集的状态时,确实没有节点。也许最初的问题是我的swarm join命令不完全正确......?

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

2 个答案:

答案 0 :(得分:1)

如果您通读documentation on overlay networks,您会看到为了创建覆盖网络,首先需要配置Docker用来协调的键/值存储(Docker目前支持etcd,consul和zookeeper)多个主机之间的事情。

来自文档:

  

要创建覆盖网络,可以在每个Docker Engine上的守护程序上配置选项,以便与覆盖网络一起使用。有三个选项可供选择:   选项说明

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

         

    描述KV服务的位置。

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

         

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

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

         

    TLS证书或调优发现计时器等选项

  •   

从你的问题来看,听起来你没有进行必要的配置。

答案 1 :(得分:0)

正如更新建议..

..问题是......

你的swarm join命令。

解决方案可能是......

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

假设您使用令牌创建了swarm。至于我,我宁愿使用静态文件。

您可以在this answer找到所需的一切。