【问题标题】:How to create an overlay network with Docker?如何使用 Docker 创建覆盖网络?
【发布时间】:2016-07-22 07:02:31
【问题描述】:

当我尝试使用 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 集群的状态时,确实没有节点。也许最初的问题是我的 swarm join 命令不完全正确...?

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

【问题讨论】:

  • 能否请您显示“ps aux | grep docker”的输出。更具体地说:启动守护程序的选项有哪些?
  • 嗨 Auzias,我已经检查过了。包括集群存储和集群选项:--cluster-store consul://127.0.0.1:8500 --cluster eth0:2375 检查我的更新。 :)
  • 您确定--cluster 选项正确吗?不应该是--cluster-advertise吗?
  • 如果未在 docker 中配置 --cluster-store--cluster-advertise 选项,您会收到该错误消息守护进程。您可以检查;运行 docker info,如果 docker 守护进程知道这两个选项,则会列出这两个选项。如果没有,您还没有成功设置这些选项。

标签: networking docker docker-compose boot2docker


【解决方案1】:

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

来自文档:

要创建覆盖网络,您可以在每个 Docker 引擎上的守护程序上配置选项以用于覆盖网络。可以设置三个选项: 选项说明

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

    描述 KV 服务的位置。

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

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

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

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

从您的问题来看,您似乎没有执行必要的配置。

【讨论】:

  • 我使用 Consul 作为 kv 存储,但可能我配置错误...实际上,我尝试创建一个集群“集群”,但只在一个主机上。我使用these 命令来设置基础架构。
  • 当你第一次尝试以 swarm 模式运行 consul 集群以支持依赖于 consul 集群的相同或其他 swarm 时,这也不值得信任
【解决方案2】:

正如更新所建议的..

..问题是..

你的 swarm join 命令。

一个解决方案可能是..

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

假设您使用令牌创建了集群。至于我,我更喜欢使用静态文件。

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

【讨论】:

  • 令牌? :)) 等等……这对我来说是新的。 :) 我遵循的示例教程没有使用这个参数......奇怪。感谢您的链接,我会检查它!
  • 啊好吧...令牌用于托管发现服务。不,我不使用那个。我想改用 Consul。
  • consul members 输出什么?
最近更新 更多