Реплики службы докера остаются 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"