docker 服务副本保持 0/1

docker service replicas remain 0/1

我正在 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

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

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

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

docker service ps hello

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

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

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

在我的例子中,副本没有工作,并且显示了 0/0,因为我之前没有构建它们。

As I saw , when u publish to swarm with a docker-compose.yml you need to build them before

所以,我决定做一个 ,然后是构建和部署(在这里,我的堆栈被称为 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 后端(Express)

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