docker swarm如何找出服务无法启动的原因

docker swarm how to find out why service can't start

我经常遇到问题,因为我在 docker swarm 上部署的具有多个节点的服务无法启动,并且没有生成我可以使用 docker service logs {serviceName}[=15= 查看的日志]

服务无法启动的可能原因有很多,例如

我很难找出容器无法启动的原因。我找到了命令 docker service ps {serviceName},它列出了一项或多项服务的任务和一条简短的错误消息(如果有错误)。但是,当我尝试使用 docker service logs {taskId} 检查任务(应该显示任务日志)时,我得到 Error response from daemon: task 3lkgo8t2sn7k not found.

任何人都可以帮助我获得为什么服务无法启动的完整错误消息吗?

我找到了一个解决问题的便捷方法。

docker service ps --no-trunc {serviceName}

这将显示下载图像、安装 nfs 卷等方面的错误。

--------------------更新

并非所有的错误都可以通过上述方式找到。另一个有用的工具是查看 docker 守护程序日志,可以按照 Whosebug 中解释的以下方式完成:

journalctl -u docker.service | tail -n 50 

It depends on your OS. Here are the few locations, with commands for few Operating Systems:

  • Ubuntu (old using upstart ) - /var/log/upstart/docker.log
  • Ubuntu (new using 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 Server - /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, as mentioned here.