小编典典

Docker Compose 保持容器运行

all

我想用 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 …”到撰写文件,我得到了无效字符的错误。如果我删除这两个命令,它会完美运行。


阅读 126

收藏
2022-08-20

共1个答案

小编典典

要在使用 启动容器时保持容器运行,请docker-compose使用以下命令

command: tail -F anything

在上面的命令中,最后一部分anything应该按字面意思包含,并且假设容器中不存在这样的文件,但是带有-F选项(大写-F不要混淆,-f相反,如果找不到文件,它将立即终止)
tail命令将永远等待文件anything出现。一个永远等待的过程基本上是我们所需要的。

所以你的 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

2022-08-20