调试Docker容器

本文讲的是调试Docker容器【编者的话】本讲述了Cloud66在解决容器无法启动时的两种解决方案,对于没有自动调试技术的我们,优先推荐手动调试方案。

最近,我看到很多人都开始在生产环境中使用Docker。同样,我们也在帮助我们的客户使用Docker,虽然整个过程挑战颇多,但这种挑战是最令人激动和神往的。今天我分享下在生产环境中使用Docker时最常遇到的问题,希望能帮到你。

如何在本地让它工作?

容器最大的好处之一就是它是静态的,因此你可以最终部署出一致性的环境。如果某个镜像有问题,那你可以直接在本地运行调试。在开发环境中运行Docker非常简单,同时也很容易调错。

如果你需要在本地构建镜像,那你需要通过运行命令docker run -it <image_name>:<tag> <command>来运行容器。该命令会指定容器所运行的服务,你可以通过输出来定位问题。

Cloud66是怎样让它工作?

这里的第一步是检查,是否你已经通过开始命令(start command)提供的服务来启动容器,该开始命令可以是在Dockerfile中也可以是在服务配置项中。如果这些已经确认,那么接下来的步骤可以帮助你解决这个问题。

自动调试(live)

使用Cloud 66 toolbelt来运行你的容器:
cx run -s <stack_name> --server <server_name> --service <service_name> 

这个命令将根据带有装载有效环境变量或者设置网络或者DNS的镜像,启动一个新的容器,并attach进容器。你将可能看到任何错误的消息,从启动开始,这将帮助你解决问题。

你可以随意添加/bin/bash到命令末尾,以此来开启Bash脚本在容器中。这将帮助你调试容器在里边。这些命令可能提供给你复制或者粘贴,如果你访问你的Stack page -> Docker server -> Server name -> View running containers (通过右键)。

手动调试(retrospective)

  1. 首先SSH到你的服务器上
  2. 我们自动输出开启容器过程中产生的日志到文件/var/log/containers中,这些文件被命名如下: <service>_start_errors.log。这些日志文件将容纳任何通过开始命令产生的输出,这将是一个理解你容器为什么没有启动起来的好的主意。
  3. 通过docker ps来确定正在运行的容器,如果容器没有运行,那可能在启动时出现了其它的问题。
  4. 在这时,我们可以运行docker ps -a检查所有的容器,包括之前启动失败的以及已经不再运行的容器。注意记下最后一次部署的容器ID,我们会在接下来的步骤中用到
  5. 现在让我们检查失败容器的日志,通过运行docker log <container-id>,将输出为什么容器不能启动的所有错误信息。

很多时候,你遇到的问题别人都遇到过。所以遇到问题时,你先用错误信息Google以下,也许很快就有了解决问题的答案。

原文链接:Debugging Docker containers(翻译:刘红 校对:宋喻)

===========================
译者介绍
刘红,目前工作于成都一家虚拟现实公司,公司已经部署Docker线上环境,如果乐意大家多多沟通Docker技术。

原文发布时间为:2015-05-09
本文作者:刚百 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:调试Docker容器
上一篇:HBase 集群监控


下一篇:爆料|阿里巴巴双创平台上野蛮生长的“小独角兽”们