我正在尝试使用Compose
和Swarm
部署我的应用。目前,我不想将docker-compose.yaml
从v2
升级到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-machine
和virtual box
)?目前,swarm管理器和工作节点作为docker容器运行。
答案 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