如何使用 Docker Compose 与遗留 Docker Swarm
How to use Docker Compose with legacy Docker Swarm
我正在尝试使用 Compose
和 Swarm
部署我的应用程序。目前我不想将我的 docker-compose.yaml
从 v2
升级到 v3
。所以我只能用 standalone(legacy) swarm
而不是 docker swarm mode
基于 Stoneman 的 和官方 Swarm 文档。
继official instruction之后,我成功搭建了一个swarm集群。我在swarm manager
节点上运行docker -H :4000 info
查看swarm集群状态,如下图。该集群中还有另外两个工作节点。接下来,我想 create
一个与这个集群的覆盖网络,并在 docker-compose.yaml
中引用这个网络。但是我在swarm manager节点上运行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.
那么,我如何创建一个带有 swarm 集群的网络(没有 docker-machine
和 virtual box
)?目前,swarm 管理器和工作节点是 运行 作为 docker 容器。
在 swarm 模式下,您 运行 在 swarm 管理器主机上执行所有命令。与创建网络、秘密等相同。
您可以通过以下方式找到 docker 管理器机器:
$docker 节点 ls
管理器主机标有 MANAGER STATUS:Leader。
在管理器上创建网络后,该群上的所有节点都应该看到该网络。
"I ran docker -H :4000 network create -d overlay test"
最好在堆栈 yml 文件中声明网络,以便更快、更轻松地部署。您可以创建网络并在 yml 文件中公开您的端口,无需在每次 运行 堆栈时手动创建它们。
在 docker 服务下添加以下块:
services:
...
#Network
networks:
- network-name-here
...
#Exposed ports:
ports:
- target: 4000
published: 4000
在 yml 文件的末尾添加以下块来声明网络,因此每次您 运行 $docker 堆栈部署时都会创建它:
networks:
network-name-here:
driver: overlay
您是否首先使用自己的 etcd 后端设置了覆盖网络? https://docs.docker.com/network/overlay-standalone.swarm/
Swarm "classic" 已弃用并被 docker swarm 模式取代。经典中的一切都更难,包括设置叠加层。除非您有严格的要求,否则我不建议将它用于任何新事物。
我正在尝试使用 Compose
和 Swarm
部署我的应用程序。目前我不想将我的 docker-compose.yaml
从 v2
升级到 v3
。所以我只能用 standalone(legacy) swarm
而不是 docker swarm mode
基于 Stoneman 的
继official instruction之后,我成功搭建了一个swarm集群。我在swarm manager
节点上运行docker -H :4000 info
查看swarm集群状态,如下图。该集群中还有另外两个工作节点。接下来,我想 create
一个与这个集群的覆盖网络,并在 docker-compose.yaml
中引用这个网络。但是我在swarm manager节点上运行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.
那么,我如何创建一个带有 swarm 集群的网络(没有 docker-machine
和 virtual box
)?目前,swarm 管理器和工作节点是 运行 作为 docker 容器。
在 swarm 模式下,您 运行 在 swarm 管理器主机上执行所有命令。与创建网络、秘密等相同。 您可以通过以下方式找到 docker 管理器机器: $docker 节点 ls 管理器主机标有 MANAGER STATUS:Leader。 在管理器上创建网络后,该群上的所有节点都应该看到该网络。
"I ran docker -H :4000 network create -d overlay test" 最好在堆栈 yml 文件中声明网络,以便更快、更轻松地部署。您可以创建网络并在 yml 文件中公开您的端口,无需在每次 运行 堆栈时手动创建它们。 在 docker 服务下添加以下块:
services:
...
#Network
networks:
- network-name-here
...
#Exposed ports:
ports:
- target: 4000
published: 4000
在 yml 文件的末尾添加以下块来声明网络,因此每次您 运行 $docker 堆栈部署时都会创建它:
networks:
network-name-here:
driver: overlay
您是否首先使用自己的 etcd 后端设置了覆盖网络? https://docs.docker.com/network/overlay-standalone.swarm/
Swarm "classic" 已弃用并被 docker swarm 模式取代。经典中的一切都更难,包括设置叠加层。除非您有严格的要求,否则我不建议将它用于任何新事物。