docker-compose 在主机重启后启动容器。哪个?

Posted

技术标签:

【中文标题】docker-compose 在主机重启后启动容器。哪个?【英文标题】:docker-compose is starting containers after host reboot. Which ones? 【发布时间】:2019-12-21 12:27:43 【问题描述】:

我是docker-compose 的新手。以前,当我手动启动容器时,在主机重新启动后,我必须手动启动容器。

今天我发现 - 在主机重新启动后 - 我有 4 个容器正在运行。这些之前都是以docker-compose 开头的。

但是docker-compose 不能很好地工作,除非你在带有docker-compose.yml 的正确目录中。

问题

我怎么知道docker-compose.yml 或(哪个路径)用于启动我发现在重新启动后登录后已经启动的 docker 容器?

我试过了

docker inspect xxxxx

但我找不到任何关于 docker-compose.yml 用于启动的线索。

【问题讨论】:

您是否在撰写文件中设置了restart 或使用docker inspect $container 来查看是否为这些自动启动容器设置了任何重启? 【参考方案1】:

docker-compose 没有启动任何东西。

Docker 守护程序正在启动您已设置重启策略的容器(可能在您的 docker-compose.yaml 文件之一中)。如果不再需要这些容器 (docker container rm ...),您可以简单地删除它们,或者您可以使用 docker container update --restart=no <image_name_or_id> 重置重启策略。

您可以阅读更多关于重启政策here。

但是 docker-compose 不能很好地工作,除非你在 docker-compose.yml 的正确目录中。

由于 docker-compose 在这个阶段不参与(它可能负责创建容器但它不负责重新启动它们),这不是问题。通过docker-compose.yml 对容器设置适当的重启策略是使容器在启动时启动的正确方法。


您可以在使用docker run 启动容器时设置重启策略,方法是在命令行中包含适当的--restart=<policy> 选项。

【讨论】:

啊,我明白了,只是为了确认一下:我也可以使用docker 手动启动一个容器,与docker-compose 无关,并设置一个“重启策略”以确保容器再次启动重新启动时。与compose 无关,但与dockerd 本身无关。这是真的吗? 正确。您可以在使用docker run --restart=<policy> ... 启动容器时设置重启策略。 啊,亲眼所见!我将接受答案作为“答案”,为了改进它,我建议您对其进行编辑以将您的最后一条评论包含在答案本身中。

以上是关于docker-compose 在主机重启后启动容器。哪个?的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose示例与命令介绍

如何使用 docker-compose 重启单个容器

docker-compose 等待启动,直到挂载主机文件系统

企业私有docker仓库 harbor---管理篇

使用 docker-compose 时如何在容器内使用主机用户修改卷文件

docker-compose 常用配置