2017-07-03 136 views
3

我正在尝试使用docker-compose services启动容器。但不幸的是,container退出了whith代码0。 容器是由.tar.gz归档的存储库构建的。这个档案是一个Centos虚拟机。用代码0退出docker

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

我已经开始编写docker-compose.yml文件来创建一个容器。

这里是我的搬运工,compose.yml:

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

注意不要到命令正如我刚才指定一个。

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

感谢您的回复。

+3

你说不注意命令,但命令在这种情况下非常重要,容器将会在命令执行期间一直存在。 –

回答

7

答案其实是第一条评论。我会稍微解释Miguel的评论。

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

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

+0

-1因为你还没有给出一个适当的解决方案,只有一个解释本身就像在评论。用可能的解决方案更新答案,我会改变主意。 – sensation

+0

这个答案完全合理,准确地描述了这个问题。 mkdir命令立即退出,成功或失败,导致容器立即退出。解决方案是不要使用mkdir作为入口点,这可以根据用例以多种方式完成。 – Mike

1

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

虽然这是非常黑客。我仍在寻找更好的解决方案。

Zend服务器映像做了这样的事情。在他们的.sh脚本中,他们有一个最终的命令:

exec /usr/local/bin/nothing 

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

编辑: 您也可以用/bin/bash结束您的文件,该文件在容器中开始一个新的终端进程并阻止其关闭。