【问题标题】:docker service replicas remain 0/1docker 服务副本保持 0/1
【发布时间】:2020-04-10 16:07:49
【问题描述】:

我正在我的 Mac 上试用 1.12 的 docker swarm。我启动了 3 个 VirtualBox VM,创建了一个 3 人的 swarm 集群。

docker@redis1:~$ docker node ls 
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
2h1m8equ5w5beetbq3go56ebl    redis3  Ready Active 
8xubu8g7pzjvo34qdtqxeqjlj    redis2  Ready Active Reachable 
cbi0lyekxmp0o09j5hx48u7vm *  redis1  Ready Active Leader

但是,当我创建服务时,我看不到任何错误,但副本始终显示 0/1:

docker@redis1:~$ docker service create --replicas 1 --name hello ubuntu:latest /bin/bash
76kvrcvnz6kdhsmzmug6jgnjv
docker@redis1:~$ docker service ls
ID            NAME   REPLICAS  IMAGE          COMMAND
76kvrcvnz6kd  hello  0/1       ubuntu:latest  /bin/bash
docker@redis1:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

可能是什么问题?我在哪里寻找日志? 谢谢!

【问题讨论】:

  • 我遇到了同样的问题,当我将“top”传递给我的命令时,它工作得很好。该指令的作用是什么?我在手册中找不到。谢谢!

标签: docker docker-swarm


【解决方案1】:

问题是您的任务(调用 bin/bash)很快退出,因为它没有做任何事情。

如果您查看服务的任务,您会看到一个已启动,然后在几秒钟内关闭。然后另一个任务会启动、关闭等等,因为您需要始终运行 1 个任务。

docker service ps hello

例如,如果您使用ubuntu:latest top,任务将保持运行。

【讨论】:

  • 就是这样。我实际上是昨晚深夜想通了,正要更新。但是非常感谢您查看并指出它。
  • 这个小调试技巧非常有用
  • 要保持容器运行而不做太多事情,您还可以使用 ``` docker run alpine tail -f /dev/null ``` 它基本上启动了一个 alpine 容器并且什么都不看(/开发/空)。这将消耗最少的 CPU。如果您想稍后将docker exec 放入其中以检查卷、网络等,则在“备用”状态下运行容器非常有用。
【解决方案2】:

如果您在撰写文件中指定了一个绑定到不存在的本地目录的卷,也会发生这种情况。

如果您查看日志(在某些 Linux 系统上,这是journalctl -xe),您会看到无法绑定哪个卷。

【讨论】:

    【解决方案3】:

    在我的情况下,副本无法正常工作,并且显示了 0/0,因为我之前没有构建它们。

    正如我看到的 here,当你发布到 swarm 时, docker-compose.yml你需要先构建它们

    所以,我决定做一个full system prune,然后在它旁边进行构建和部署(这里,我的堆栈被称为demo,我之前没有运行过服务或容器):

    docker stack rm demo 
    docker system prune --all
    docker-compose build
    docker stack deploy -c ./docker-compose.yml demo
    

    在此之后,一切都已启动并运行,现在服务副本已在 swarm 上运行

    PS C:\Users\Alejandro\demo> docker service ls
    ID                  NAME                 MODE                REPLICAS            IMAGE               PORTS
    oi0ngcmv0v29        demo_appweb          replicated          2/2                 webapp:1.0          *:80->4200/tcp
    ahuyj0idz5tv        demo_express         replicated          2/2                 backend:1.0         *:3000->3000/tcp
    fll3m9p6qyof        demo_fileinspector   replicated          1/1                 fileinspector:1.0   *:8080->8080/tcp
    

    我目前在开发模式下维护副本工作的方式:

    • Angular/CLi 应用程序:

      command: >    
        bash -c "npm install && ng serve --host 0.0.0.0 --port 4200"
      
    • NodeJS 后端(快速)

      command: > 
        bash -c "npm install && set DEBUG=myapp:* & npm start --host 0.0.0.0 --port 3000"
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多