在Raspberry Pi上运行Docker时,启动容器会不时失败

我已经通过运行Resin.io博客中描述的步骤安装了Docker(0.8.0-1)。 基本上,一切运作良好,我能够启动docker守护程序以及运行客户端。

不幸的是,当我尝试运行一个容器时,它有时会失败。 这不取决于实际的容器,因为当你重复它的工作命令。 有时它需要两次以上的审判,有时也是第一次尝试。 我的run命令基本上是这样的:

 $ docker run -i -t --rm=true resin/rpi-raspbian bash 

所以,到目前为止,没有什么奇特的…我得到的错误消息只告诉我,容器退出code 1 ,无论这意味着什么。

基本上,当我尝试build一个Dockerfile的时候,也会发生同样的情况:通常,它只能用于一个步骤,而不能用于下一个。 由于Docker在内部caching结果,您可以通过手动一次又一次地执行Dockerfile来构buildDockerfile,并且在每次运行中您都可以进一步完成。 如果失败,再次code 1

确切的错误信息是:

2014/02/27 18:15:45错误:启动:无法启动容器99fc6a3327fb4af25e6c7a07d992009dde8a5425de89f44aae76ce4740e09492:退出状态1

令我惊讶的是,当我之后运行docker ps -a ,容器并没有被移除(至less,那些无法创build的容器仍然存在),更令人惊讶的是,这个命令列出了状态码为-1

当我跑步时,我没有看到日志里有什么东西

 $ docker logs 99fc 

任何想法可能会导致这些问题?

UPDATE

不幸的是,系统中既没有/var/log/messages文件夹也没有/var/log/syslog文件夹,但是如果我运行dmesg ,最后一行是:

 [56954.479079] device veth4FI4FH entered promiscuous mode [56955.270388] docker0: port 1(veth4FI4FH) entered forwarding state [56955.270493] docker0: port 1(veth4FI4FH) entered forwarding state [56955.480603] docker0: port 1(veth4FI4FH) entered disabled state [56955.484685] device veth4FI4FH left promiscuous mode [56955.484726] docker0: port 1(veth4FI4FH) entered disabled state 

更新2

我现在发现我通过调用journalctl获得扩展日志(因为我在基于systemd的系统上)。 我得到的是:

 Feb 28 09:31:02 white docker[123]: 2014/02/28 09:31:02 POST /v1.9/containers/create Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job create() Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] -job create() = OK (0) Feb 28 09:31:02 white docker[123]: 2014/02/28 09:31:02 POST /v1.9/containers/8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916/attach?stderr=1&stdin=1&stdout=1&stream=1 Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job inspect(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916, container) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] -job inspect(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916, container) = OK (0) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job attach(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:02 white docker[123]: 2014/02/28 09:31:02 POST /v1.9/containers/8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916/start Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job start(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job allocate_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] -job allocate_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = OK (0) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] +job allocate_port(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:02 white docker[123]: [/docker|5cd5747f] -job allocate_port(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = OK (0) Feb 28 09:31:03 white docker[123]: [error] container.go:1244 Error running container: exit status 1 Feb 28 09:31:03 white docker[123]: [/docker|5cd5747f] +job release_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:03 white kernel: device vethHXP55Y entered promiscuous mode Feb 28 09:31:03 white avahi-daemon[131]: Withdrawing workstation service for vethUTI4YT. Feb 28 09:31:03 white docker[123]: [/docker|5cd5747f] -job release_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = OK (0) Feb 28 09:31:03 white docker[123]: [/docker|5cd5747f] -job attach(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = OK (0) Feb 28 09:31:04 white docker[123]: [/docker|5cd5747f] +job release_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) Feb 28 09:31:04 white docker[123]: 2014/02/28 09:31:04 Unable to unmap port 0.0.0.0:80: port is not mapped Feb 28 09:31:04 white docker[123]: [/docker|5cd5747f] -job release_interface(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = OK (0) Feb 28 09:31:04 white docker[123]: [error] container.go:1299 8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916: Error closing Pty master: invalid argument Feb 28 09:31:04 white kernel: docker0: port 1(vethHXP55Y) entered forwarding state Feb 28 09:31:04 white kernel: docker0: port 1(vethHXP55Y) entered forwarding state Feb 28 09:31:04 white docker[123]: Cannot start container 8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916: exit status 1[/docker|5cd5747f] -job start(8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916) = ERR (1) Feb 28 09:31:04 white docker[123]: [error] api.go:959 Error: start: Cannot start container 8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916: exit status 1 Feb 28 09:31:04 white docker[123]: [error] api.go:91 HTTP Error: statusCode=500 start: Cannot start container 8d2928a6a4b4c57aa2760a3681a5fbcf53f890e85d6830b97b9245366d284916: exit status 1 Feb 28 09:31:04 white kernel: docker0: port 1(vethHXP55Y) entered disabled state Feb 28 09:31:04 white avahi-daemon[131]: Withdrawing workstation service for vethHXP55Y. Feb 28 09:31:04 white kernel: device vethHXP55Y left promiscuous mode Feb 28 09:31:04 white kernel: docker0: port 1(vethHXP55Y) entered disabled state 

所以显然问题是在container.go:1244试图启动容器。

这有什么帮助吗?

正如你使用我们的Docker的Resin端口,我会假设你正在运行Arch linux。 在Arch中,最新的lxc包是lxc-1.0,docker已经知道这个版本的lxc [1]有问题。

降低lxc到0.9或0.8应该可以解决这个问题。 Arch保存最近在/var/cache/pacman/pkg下载的软件包的/var/cache/pacman/pkg 。 因此,以root身份执行pacman -U /var/cache/pacman/pkg/lxc-<VERSION> ,然后重新启动pacman -U /var/cache/pacman/pkg/lxc-<VERSION>守护进程。

如果你没有find一个caching包,你会发现更多的方法来做到这一点[2]。

[1] https://github.com/dotcloud/docker/issues/4298

[2] https://wiki.archlinux.org/index.php/Downgrading_Packages