退出代码0 docker

问题描述 投票:11回答:3

我正在尝试使用docker-compose服务启动容器。但不幸的是,容器退出了whith代码0.容器是由一个来自.tar.gz存档的存储库构建的。此存档是Centos VM。

我想从同一档案中创建6个容器。而不是键入6次docker命令,我想创建一个docker-compose.yml文件,我可以在其中汇总他们的命令和标记。

我已经开始编写docker-compose.yml文件,只是为了创建一个容器。

这是我的docker-compose.yml:

version: '2'
services:
  dvpt:
   image: compose:test.1
   container_name: cubop1
   command: mkdir /root/essai/
   tty: true

不要注意命令,因为我只需要指定一个命令。

所以我的问题是,为什么容器正在退出?还有另一种解决方案可以同时构建这些容器吗?

谢谢你的回复。

docker docker-compose boot2docker docker-machine
3个回答
20
投票

答案实际上是第一个评论。我会稍微解释一下米格尔的评论。

首先,我们需要了解Docker容器运行单个命令。只要该命令启动的进程正在运行,容器就会运行。一旦完成该过程并退出,则容器将停止。

有了这种理解,我们就可以假设你的情况发生了什么。当你启动你的dvpt服务时,它运行命令mkdir /root/essai/。该命令创建文件夹然后退出。此时,Docker容器已停止,因为该进程已退出(状态为0,表示mkdir已完成且没有错误)。


2
投票

一种解决方案是创建一个不结束的进程,一个无限循环或可以在后台连续运行的东西。这将保持容器打开,因为该过程不会退出。

这非常黑客。我还在寻找更好的解决方案。

Zend Server映像就是这样的。在他们的.sh脚本中,他们有一个最终命令:

exec /usr/local/bin/nothing

它执行在后台持续运行的文件。我试图在这里复制文件内容,但它必须是二进制文件。

编辑:你也可以用/bin/bash结束你的文件,它在容器中开始一个新的终端进程并使其不能关闭。


1
投票

你可以像tail -f / dev / null这样的命令结束

它经常在我的docker-compose.yml中使用

command: tail -f /dev/null

而且很容易看出我如何保持容器运行。

docker ps

© www.soinside.com 2019 - 2024. All rights reserved.