Docker Compose保持容器运行

问题描述:

我想用docker-compose启动服务并保持容器运行,以便通过“docker检查”获取其IP地址。但是,容器在启动后总是立即退出。Docker Compose保持容器运行

我试图在docker-compose.yml中添加“command:[”sleep“,”60“]”和其他东西,但是每当我将该行添加到“command:...”我都不能调用“docker - 组成“,因为我会得到的消息”无法启动容器.....系统错误:无效的字符'K'寻找价值的开始“

我也尝试添加”CMD睡眠60“和什么不是Dockerfile本身,但这些命令似乎并没有被执行。

有没有简单的方法来保持容器活着或解决我的一个问题?

编辑: 这里是撰写文件,我想运行:

version: '2' 
services: 
    my-test: 
    image: ubuntu 
    command: bash -c "while true; do echo hello; sleep 2; done" 

它的正常工作。如果我开始这与在OS X泊坞窗,作曲,但如果我尝试Ubuntu的16.04下同样它给我上面的错误消息。

如果我尝试用Dockerfile的方针,Dockerfile看起来是这样的:

FROM ubuntu:latest 
CMD ["sleep", "60"] 

这似乎并没有做任何事情

编辑2: 我必须纠正自己,原来它是与Dockerfile和docker-compose.yml相同的问题: 每次我向Dockerfile添加“CMD ...”或向撰写文件添加“command ...”时,我会收到无效错误字符。如果我删除这两个命令,它的工作完美无瑕。

+1

请包括docker-compose.yml,Dockerfile和您正在尝试调试的任何脚本。 – BMitch

+0

一个相关的讨论,对于那些感兴趣的人:[使用Docker Compose的服务器和客户端的开发流程?](https://*.com/q/31372886/320399) – blong

为了保持容器中运行,当你与docker-compose启动它,请使用以下命令

command: tail -F anything

所以,你的搬运工,撰写。阳明海运成为

version: '2' 
services: 
    my-test: 
    image: ubuntu 
    command: tail -F anything 

,您可以使用下面的命令运行shell进入容器

docker exec -i -t composename_my-test_1 bash

其中composename是名docker-compose预规划到您的容器。

+0

当你完成它时,你如何停止容器?是否有Ctrl + C,Ctrl + Z类型的命令?现在我必须关闭终端才能退出。 – mac10688

正如评论者指出,我们必须看到Dockerfile问题给你一个完整的答案,但是这是一个很常见的错误。我几乎可以保证你试图运行的命令开始一个后台进程。这可能是你在非Docker情况下运行的命令,但是在Dockerfile中这是错误的。例如,如果你正在运行的是通常被定义为系统服务的,你可以使用类似“systemctl start”的东西。这将在后台启动进程,这将无法正常工作。你必须在前台运行这个进程,这样整个进程就会被阻塞。

好吧,我发现我的错误。在用于构图的图像的Dockerfile中,我指定基本图像应该是ubuntu:latest,但我之前创建了一个名为ubuntu的图像,并且该图像无效。所以我没有使用原始的ubuntu映像,而是使用了我自己的映像的一个损坏版本,也称为ubuntu。

在Dockerfile你可以使用命令:

{CMD sleep infinity} 

https://github.com/docker/compose/issues/1926#issuecomment-135068628

人们可以使用command: tail -f /dev/null在泊坞窗,撰写,以保持容器中运行。