我想用 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 …”到撰写文件,我得到了无效字符的错误。如果我删除这两个命令,它会完美运行。
要在使用 启动容器时保持容器运行,请docker-compose使用以下命令
docker-compose
command: tail -F anything
在上面的命令中,最后一部分anything应该按字面意思包含,并且假设容器中不存在这样的文件,但是带有-F选项(大写-F不要混淆,-f相反,如果找不到文件,它将立即终止) 该tail命令将永远等待文件anything出现。一个永远等待的过程基本上是我们所需要的。
anything
-F
-f
tail
所以你的 docker-compose.yml 变成
version: '2' services: my-test: image: ubuntu command: tail -F anything
您可以使用以下命令运行 shell 以进入容器
docker exec -i -t composename_my-test_1 bash
容器前面composename的名称在哪里。docker-compose
composename