调试Dcoker容器

yn6e 9年前

>原文  http://dockone.io/article/367


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

这短暂几个月,看到大家都在生产环境下用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技术。

</div>