Docker stack deploy 无法将服务部署到 swarm 集群中的不同节点

Docker stack deploy cannot deploy service to different node in swarm cluster

我正在尝试在多个实例上部署应用程序。在主节点上。部署应用程序后 运行 唯一的主节点。无法在 docker swarm 集群中部署服务不同的节点。 这是我的 docker-compose 文件

version: "3"

services:

  mydb:
    image: localhost:5000/mydb-1
    environment:
      TZ: "Asia/Colombo"
    ports:
      - 9042:9042
    volumes:
      - /root/data/cdb:/var/lib/cassandra
      - /root/logs/cdb:/var/log/cassandra

命令docker service scale mydb-1_mydb=5

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
7fxxxxxxxx7        localhost:5000/mydb-1:latest   "docker-entrypoint.sh"   16 seconds ago      Up 5 seconds        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp           mydb-1_mydb.2.q77i258vn2xynlgein9s7tdpb
34fcxxxx14bd        localhost:5000/mydb-1:latest   "docker-entrypoint.sh"   16 seconds ago      Up 4 seconds        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp           mydb-1_mydb.1.s2mzitj8yzb0zo7spd3dmpo1j
9axxxx1efb        localhost:5000/mydb-1:latest   "docker-entrypoint.sh"   16 seconds ago      Up 8 seconds        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp           mydb-1_mydb.3.zgyev3p4qdg7hf7h67oeedutr
f14xxxee59        localhost:5000/mydb-1:latest   "docker-entrypoint.sh"   16 seconds ago      Up 2 seconds        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp           mydb-1_mydb.4.r0themodonzzr1izdbnppd5bi
e3xxx16d        localhost:5000/mydb-1:latest   "docker-entrypoint.sh"   16 seconds ago      Up 6  seconds        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp           mydb-1_mydb.5.bdebi4

所有 运行 仅主节点。有人知道这个问题吗?

您的图像似乎是本地构建的,其名称无法在其他节点 (localhost:5000/mydb-1) 中解析。在 swarm 中,图像应该被推送到注册表,并且该注册表需要所有节点都可以访问。您可以在自己的节点上 运行 自己的注册表服务,有一个 docker image,或者您可以推送到 docker 中心。如果注册表是私有的,您还需要在 运行 部署堆栈的节点上执行 docker login 并在该部署中包含注册表凭据,例如

docker stack deploy -c compose.yml --with-registry-auth stack-name

谢谢。我找到问题并修复了。

volumes:
      - /root/data/cdb:/var/lib/cassandra
      - /root/logs/cdb:/var/log/cassandra

如果将主机路径绑定挂载到服务的容器中,则该路径必须存在于每个 swarm 节点上。

docker service scale zkr_zkr=2

扩展服务后运行我的节点

root@beta-node-1:~# docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                                    NAMES
f9bxxx15861        localhost:5000/zookeeper:latest   "/docker-entrypoint.…"   40 minutes ago      Up 40 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp   zkr_zkr.3.qpr8qp5y
01dxxxx64bc        localhost:5000/zookeeper:latest   "/docker-entrypoint.…"   40 minutes ago      Up 40 minutes       2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp   zkr_zkr.1.g2uee5j