我正在尝试使用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容器运行单个命令。只要该命令启动的进程正在运行,容器就会运行。一旦完成该过程并退出,则容器将停止。
有了这种理解,我们就可以假设你的情况发生了什么。当你启动你的dvpt
服务时,它运行命令mkdir /root/essai/
。该命令创建文件夹然后退出。此时,Docker容器已停止,因为该进程已退出(状态为0,表示mkdir
已完成且没有错误)。
一种解决方案是创建一个不结束的进程,一个无限循环或可以在后台连续运行的东西。这将保持容器打开,因为该过程不会退出。
这非常黑客。我还在寻找更好的解决方案。
Zend Server映像就是这样的。在他们的.sh脚本中,他们有一个最终命令:
exec /usr/local/bin/nothing
它执行在后台持续运行的文件。我试图在这里复制文件内容,但它必须是二进制文件。
编辑:你也可以用/bin/bash
结束你的文件,它在容器中开始一个新的终端进程并使其不能关闭。
你可以像tail -f / dev / null这样的命令结束
它经常在我的docker-compose.yml中使用
command: tail -f /dev/null
而且很容易看出我如何保持容器运行。
docker ps