如何使用Docker Compose与遗留Docker Swarm

如何使用Docker Compose与遗留Docker Swarm,docker,docker-compose,docker-swarm,docker-networking,Docker,Docker Compose,Docker Swarm,Docker Networking,我正在尝试使用Compose和Swarm部署我的应用程序。目前我不想将我的docker compose.yaml从v2升级到v3。因此,我只能使用独立(遗留)swarm而不是基于Stoneman和swarm官方文档的docker swarm模式 接下来,我成功地建立了一个swarm集群。我在swarm manager节点上运行docker-H:4000 info,检查swarm集群状态,如下所示。此群集中还有两个其他工作节点。接下来,我想用这个集群创建一个覆盖网络,并在docker compos

我正在尝试使用
Compose
Swarm
部署我的应用程序。目前我不想将我的
docker compose.yaml
v2
升级到
v3
。因此,我只能使用
独立(遗留)swarm
而不是基于Stoneman和swarm官方文档的
docker swarm模式

接下来,我成功地建立了一个swarm集群。我在
swarm manager
节点上运行
docker-H:4000 info
,检查swarm集群状态,如下所示。此群集中还有两个其他工作节点。接下来,我想用这个集群创建一个覆盖网络,并在docker compose.yaml中引用这个网络。但是当我在swarm manager节点上运行
docker-H:4000 network create-d overlay test以创建netwrok时,它报告了错误:
error response from daemon:error response from daemon:This node不是swarm manager。使用“docker swarm init”或“docker swarm join”将此节点连接到swarm,然后重试。

那么,我如何创建一个具有群集的网络(没有
docker machine
virtual box
)?目前,swarm manager和worker节点作为docker容器运行。

在swarm模式下,您可以在swarm manager主机上运行所有命令。与创建网络、秘密等相同。 您可以通过以下方式找到docker manager计算机: $docker节点ls 管理器主机标记为管理器状态:Leader。 在manager上创建网络后,该swarm上的所有节点都应该看到网络

“我运行了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 

您是否先用自己的etcd后端设置了覆盖网络


Swarm“classic”已被弃用,取而代之的是docker Swarm模式。在经典中,一切都很困难,包括设置覆盖。除非你有严格的要求,否则我不建议你用它做任何新的东西

谢谢你的回答。但实际上我没有使用群集模式。我用
classic swarm
、aka
standalone
legacy
swarm建立了一个swarm集群。对于
swarm模式
,我没有遇到任何问题。Chalex您已经阅读了@Bret的答案。你的要求是swarm经典吗?Jinna,我已经转向Docker swarm模式,解决了我的问题。我只是想知道如何建立一个覆盖网络与经典的Docker Swarm。我想会有一些详细的说明。是的,我试着用经典Swarm建立覆盖网络。但我没能做到。然后我转向Docker Swarm模式,解决了我的问题。那么,有可能用经典Swarm建立一个覆盖网络吗?用经典Swarm建立一个覆盖网络总是如此模糊和困难吗?是的,因为经典Swarm在被Swarm模式取代之前只存在了1.5年。在那之后,它没有收到任何进一步的功能或社区的喜爱,因为Swarm模式用更少的努力解决了大部分相同的问题。我懂了。谢谢你的回答。