如何在多主机之间创建docker overlay网络?

时间:2015-12-18 23:44:24

标签: linux ubuntu networking docker network-programming

我一直在尝试在两台主机之间创建一个覆盖网络但没有成功。我一直收到错误消息:

mavungu@mavungu-Aspire-5250:~$ sudo docker -H tcp://192.168.0.18:2380 network create -d overlay myapp
Error response from daemon: 500 Internal Server Error: failed to parse pool request for address space "GlobalDefault" pool "" subpool "": cannot find address space GlobalDefault (most likely the backing datastore is not configured)

mavungu@mavungu-Aspire-5250:~$ sudo docker network create -d overlay myapp
[sudo] password for mavungu:
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)

我的环境详情:

mavungu@mavungu-Aspire-5250:~$ sudo docker info Containers: 1
Images: 364 Server Version: 1.9.1 Storage Driver: aufs Root Dir:
/var/lib/docker/aufs Backing Filesystem: extfs Dirs: 368 Dirperm1
Supported: true Execution Driver: native-0.2 Logging Driver:
json-file Kernel Version: 3.19.0-26-generic Operating System: Ubuntu
15.04 CPUs: 2 Total Memory: 3.593 GiB Name: mavungu-Aspire-5250 Registry: https://index.docker.io/v1/ WARNING: No swap limit support

我有一个swarm群集与consul一起很好地作为发现机制:

mavungu@mavungu-Aspire-5250:~$ sudo docker -H tcp://192.168.0.18:2380 info 

Containers: 4 
Images: 51 
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
mavungu-Aspire-5250: 192.168.0.36:2375
└ Containers: 1
└ Reserved CPUs: 0 / 2
└ Reserved Memory: 0 B / 3.773 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.19.0-26-generic, operatingsystem=Ubuntu 15.04, storagedriver=aufs
mavungu-HP-Pavilion-15-Notebook-PC: 192.168.0.18:2375
└ Containers: 3
└ Reserved CPUs: 0 / 4
└ Reserved Memory: 0 B / 3.942 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.2.0-19-generic, operatingsystem=Ubuntu 15.10, storagedriver=aufs
CPUs: 6
Total Memory: 7.715 GiB
Name: bb47f4e57436

我的领事可以在192.168.0.18:8500获得,它可以与群集群一起使用。

我希望能够在两台主机上创建一个覆盖网络。我已使用以下附加设置在两台主机上配置了docker引擎:

DOCKER_OPTS="-D --cluster-store-consul://192.168.0.18:8500 --cluster-advertise=192.168.0.18:0"

DOCKER_OPTS="-D --cluster-store-consul://192.168.0.18:8500 --cluster-advertise=192.168.0.36:0"

我必须停止并重新启动引擎并重置群集群集... 在无法创建覆盖网络后,我将--cluster-advertise设置更改为:

DOCKER_OPTS="-D --cluster-store-consul://192.168.0.18:8500 --cluster-advertise=192.168.0.18:2375"

DOCKER_OPTS="-D --cluster-store-consul://192.168.0.18:8500 --cluster-advertise=192.168.0.36:2375"

但它仍然没有用。我不确定应该为--cluster-advertise=设置什么ip:port。关于这个广告的文档,讨论和教程都不清楚。

我在这里遇到了一些问题。请帮忙。

2 个答案:

答案 0 :(得分:2)

我认为您指定的选项应使用cluster-store=consul而不是cluster-store-consul。尝试重置并重新启动引擎和swarm并检查它是否有效。它应该在那之后工作。 getting started doc清楚地解释了如何使用consul作为后备数据存储来配置docker overlay网络。

DOCKER_OPTS="-D --cluster-store=consul://192.168.0.18:8500 --cluster-advertise=192.168.0.18:2375"

DOCKER_OPTS="-D --cluster-store=consul://192.168.0.18:8500 --cluster-advertise=192.168.0.36:2375"

答案 1 :(得分:0)

对于自Docker 1.12发布以来的所有人来说,现在这很简单 - Swarm Mode内置于引擎中,您不需要Consul或任何其他额外组件。

假设您有两台安装了Docker的主机,请在第一台机器上初始化Swarm:

> docker swarm init
Swarm initialized: current node (6ujd4o5fx1dmav5uvv4khrp33) is now a manager

To add a worker to this swarm, run the following command:                                                                                                   
docker swarm join \                                                                                                                                     
--token SWMTKN-1-54xs4bn7qs6su3xjjn7ul5am9z9073by2aqpey56tnccbi93zy-blugim00fuozg6qs289etc \                                                         
172.17.0.54:2377

该主机成为swarm中的第一个管理器节点,它会写出用于将其他节点加入swarm的命令 - 秘密令牌以及管理器正在侦听的IP地址。

在第二台主持人上:

> docker swarm join 172.17.0.54:2377 --token SWMTKN-1-54xs4bn7qs6su3xjjn7ul5am9z9073by2aqpey56tnccbi93zy-blugim00fuozg6qs289etc
This node joined a swarm as a worker.

现在您拥有一个安全的双节点群,其中包含service discoveryrolling updatesservice scaling

使用以下命令在管理器节点上创建覆盖网络:

> docker network create -d overlay my-net
d99lmsfzhcb16pdp2k7o9sehv

现在您拥有一个内置DNS的多主机覆盖网络,因此服务可以根据服务名称相互解析。