Docker Compose 保持容器运行

新手上路,请多包涵

我想用 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 许可协议

阅读 1.9k
2 个回答

要在使用 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) the tail command will wait forever for the file 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

其中 composenamedocker-compose 到您的容器的名称。

原文由 Nick Settje 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 tty 配置选项。

 version: '3'

services:
  app:
    image: node:8
    tty: true           # <-- This option

注意:如果你使用 Dockerfile 作为镜像并且在 Dockerfile 中使用 CMD ,这个选项将不起作用;但是,您可以在 compose 文件中使用 entrypoint 选项从 Dockerfile 中清除 CMD

原文由 highjump 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题