我想用 docker-compose 启动一个服务并保持容器运行,这样我就可以通过 ‘docker inspect’ 获取它的 IP 地址。但是,容器总是在启动后立即退出。
我尝试在 docker-compose.yml 中添加“command: [“sleep”, “60”]” 和其他内容,但是每当我添加带有“command:…”的行时,我都无法调用“docker-compose up”因为我会收到消息“无法启动容器…..系统错误:无效字符’k’正在寻找值的开头”
我还尝试将“CMD sleep 60”等添加到 Dockerfile 本身,但这些命令似乎没有被执行。
有没有一种简单的方法可以让容器保持活力或解决我的一个问题?
编辑:这是我要运行的 Compose 文件:
version: '2'
services:
my-test:
image: ubuntu
command: bash -c "while true; do echo hello; sleep 2; done"
它工作正常如果我在 OS X 下使用 docker-compose 启动它,但如果我在 Ubuntu 16.04 下尝试相同,它会给我上面的错误消息。
如果我尝试使用 Dockerfile 的方法,Dockerfile 看起来像这样:
FROM ubuntu:latest
CMD ["sleep", "60"]
这似乎没有做任何事情
编辑 2:我必须纠正自己,结果发现 Dockerfile 和 docker-compose.yml 存在同样的问题:每次我将“CMD …”添加到 Dockerfile 或添加“command …”到撰写文件,我得到了无效字符的错误。如果我删除这两个命令,它会完美运行。
原文由 dingoglotz 发布,翻译遵循 CC BY-SA 4.0 许可协议
要在使用
docker-compose
启动容器时保持容器运行,请使用以下命令command: tail -F anything
在上面的命令中,最后一部分
anything
应该包含在字面上,并且假设容器中不存在这样的文件,但使用-F
选项(大写-F
not to be confused with-f
which in contrast will terminate immediateley if the file is not found) thetail
command will wait forever for the fileanything
出现。一个永远等待的过程基本上是我们所需要的。所以你的 docker-compose.yml 变成
您可以使用以下命令运行 shell 以进入容器
docker exec -i -t composename_my-test_1 bash
其中
composename
是docker-compose
到您的容器的名称。