docker swarm как узнать, почему служба не может начаться

у меня часто возникают проблемы, потому что служба, которую я развертываю на docker swarm с несколькими узлами, не запускается, и нет журналов, которые я могу посмотреть с docker service logs {serviceName}

существует множество возможных причин, по которым служба не запускается, например

  • не удается загрузить изображение из реестра
  • ограничения, которые не могут быть выполнены

мне трудно выяснить, почему контейнер не запускается. Я нашел команду docker service ps {serviceName} что Перечислите задачи одной или нескольких служб и короткое сообщение об ошибке (если произошла ошибка). Однако, когда я пытаюсь проверить задачу с docker service logs {taskId} (который должен показывать журналы задачи) я получаю Error response from daemon: task 3lkgo8t2sn7k not found.

может кто-нибудь помочь мне получить полное сообщение об ошибке, почему служба не запускается?

1 ответов


я нашел одно удобное решение проблемы.

docker service ps --no-trunc {serviceName}

который покажет ошибки при загрузке изображений, монтируя Тома nfs среди других.

---------------------- UPDATE

не все ошибки можно найти описанным выше способом. Другой полезный инструмент смотрит на журналы docker deamon, которые можно сделать следующим образом, как объяснено на stackoverflow:

journalctl -u docker.service | tail -n 50 

это зависит от вашей ОС. Вот несколько местоположений с командами для нескольких операционных систем:

  • Ubuntu (старый, используя выскочку ) -/var/log/upstart/docker.log
  • Ubuntu (новое использование systemd ) -journalctl -u docker.service
  • Boot2Docker - /var/log/docker.log
  • Debian GNU/Linux - /var/log/daemon.log
  • CentOS -/var/log/daemon.log | grep docker
  • по CoreOS - journalctl -u docker.service
  • Fedora -journalctl -u docker.service
  • Сервер Red Hat Enterprise Linux -/var/log/messages | grep docker
  • OpenSuSE -journalctl -u docker.service
  • OSX -~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d‌​ocker.log
  • Windows -Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time, как указано здесь.