繁体   English   中英

如何在旧版Docker Swarm中使用Docker Compose

[英]How to use Docker Compose with legacy Docker Swarm

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

按照官方指示 ,我成功地建立了群集集群。 我在swarm manager节点上运行了docker -H :4000 info来检查swarm集群的状态,如下所示。 该集群中还有两个其他工作节点。 接下来,我想使用该集群create一个覆盖网络,并在docker-compose.yaml引用该网络。 但是,当我在群集管理器节点上运行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. 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 )? 当前,群集管理器和工作程序节点正在作为docker容器运行。 在此处输入图片说明

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

Swarm“经典”已弃用,并由docker swarm模式取代。 包括设置叠加层在内,一切都变得更困难。 除非您有严格的要求,否则我建议您不要将它用于任何新事物。

在群集模式下,您可以在群集管理器主机上运行所有命令。 与创建网络,机密等相同。您可以通过以下方式找到Docker管理器计算机:$ docker node ls管理器主机已标记为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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM