如何使用Docker Compose与传统的Docker Swarm

时间:2018-04-18 06:39:38

标签: docker docker-compose docker-swarm docker-networking

我正在尝试使用ComposeSwarm部署我的应用。目前,我不想将docker-compose.yamlv2升级到v3。所以我只能使用standalone(legacy) swarm而不是基于Stoneman的answer和官方Swarm文档的docker swarm mode来做到这一点。

official instruction之后,我成功建立了一个群集群。我在docker -H :4000 info节点上运行swarm manager以检查群集群集状态,如下所示。此群集中还有另外两个工作节点。接下来,我想create使用此群集的覆盖网络,并在docker-compose.yaml中引用此网络。但是当我在swarm管理器节点上运行docker -H :4000 network create -d overlay test来创建netwrok时,它报告错误:Error response from daemon: Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

那么,如何创建一个包含群集的网络(没有docker-machinevirtual box)?目前,swarm管理器和工作节点作为docker容器运行。 enter image description here

2 个答案:

答案 0 :(得分:1)

您是否首先使用自己的etcd后端设置了覆盖网络? https://docs.docker.com/network/overlay-standalone.swarm/

Swarm“classic”已弃用,取而代之的是docker swarm模式。经典中的一切都比较困难,包括设置叠加层。除非你有严格的要求,否则我不建议将它用于任何新的东西。

答案 1 :(得分:0)

在群集模式下,您可以在群集管理器主机上运行所有命令。与创建网络,秘密等相同 您可以通过以下方式找到docker manager机器: $ docker node ls Manager主机标有MANAGER STATUS:Leader。 在管理器上创建网络后,该群上的所有节点都应该看到网络。

“我运行了docker -H:4000网络创建-d叠加测试” 最好在堆栈yml文件中声明网络,以便更快,更轻松地部署。您可以在yml文件中创建网络并公开您的端口,无需在每次运行堆栈时手动创建它们。 在docker服务下添加以下块:

services:
...
#Network
   networks:
    - network-name-here
...
#Exposed ports:
  ports:
    - target: 4000 
      published: 4000

在yml文件的末尾添加以下块来声明网络,因此每次运行$ docker stack deploy时都会创建它:

networks:
  network-name-here:
   driver: overlay