Реплики службы докера остаются 0/1

Я пробую Docker Swarm с 1.12 на моем Mac. Я запустил 3 виртуальные машины VirtualBox, создал рой кластера из 3, все отлично.

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

В чем может быть проблема? Где искать логи? Спасибо!

1 ответ

Решение

Проблема в том, что ваши задачи (вызов bin/bash) быстро завершаются, поскольку они ничего не делают.

Если вы посмотрите на задачи для вашего сервиса, вы увидите, что он запускается, а затем выключается в течение нескольких секунд. Затем запускается еще одна, выключается и так далее, поскольку вас просят, чтобы всегда выполнялась одна задача.

docker service ps hello

Если вы используете ubuntu:latest top например, задача будет продолжать работать.

Это также может произойти, если в файле компоновки вы указали том, связанный с локальным каталогом, который не существует.

В моем случае реплики не работали и 0/0 был показан, поскольку я не строил их раньше.

Как я видел здесь, когда вы публикуете, чтобы роиться с docker-compose.yml вам нужно построить их раньше

Итак, я решил провести полную очистку системы, а рядом с ней - сборку и развертывание (здесь мой стек называлсяdemo и у меня не было ранее запущенных служб или контейнеров):

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

После этого все было запущено, и теперь реплики сервисов работают в рое.

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"
    
Другие вопросы по тегам