当前位置: 首页 > 面试题库 >

如何等待Docker容器启动并运行?

左丘嘉木
2023-03-14
问题内容

在容器内运行服务时,假设使用mongodb命令

docker run -d myimage

将立即退出,并返回容器ID。在我的CI脚本中,我在运行mongo容器之后立即运行客户端以测试mongodb连接。问题是:由于服务尚未启动,客户端无法连接。除了sleep 10在脚本中添加大字体外,我看不到任何等待容器启动并运行的选项。

Docker的命令wait在这种情况下不起作用,因为该容器不存在。是docker的限制吗?


问题答案:

如在docker 1.12
的类似问题中所述

HEALTHCHECK支持已根据docker /
docker#23218在
上游合并-
可考虑在启动该订单中的下一个容器之前确定容器何时健康

自docker
1.12rc3(2016-07-14)起可用

docker- compose正在支持等待特定条件的功能。

它使用libcompose(因此我不必重建docker交互)并为此添加了一堆配置命令。在这里查看:https : //github.com/dansteen/control-
compose

您可以像这样在Dockerfile中使用它:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

官方文档:https :
//docs.docker.com/engine/reference/builder/#/healthcheck



 类似资料:
  • 我正在使用rabbitmq和一个简单的python示例以及docker-compose。我的问题是需要等待rabbitmq完全启动。从我到目前为止搜索的内容来看,我不知道如何使用容器x(在我的情况下是worker)等待直到启动y(rabbitmq)。 我发现了这篇博文,他在那里检查另一个主机是否在线。我还找到了这个docker命令: 等等 用法:docker wait CONTAINER[CONT

  • 问题内容: 我正在使用Search Guard插件来保护由多个节点组成的elasticsearch集群。这是我的Dockerfile: 初始化SearchGuard(创建内部用户并分配角色)。容器启动后,我需要运行脚本。这是问题所在:除非运行Elasticsearch,否则脚本将不会初始化任何安全性索引。 脚本的内容是: 现在,我只是在容器启动后手动运行脚本,但是由于我是在Kubernetes上运

  • 我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始: 但MySQL服务不会自动启动,我必须手动运行(从容器内): 如何在运行docker容器时自动启动MySQL服务?

  • 问题内容: 我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样: 但是MySQL服务不会自动启动,我必须手动运行(从容器内部): 运行docker容器时如何自动启动MySQL服务? 问题答案: 首先,有一个 问题, 在您的: Docker映像不会保存正在运行的进程。因此,您的命令仅在阶段执行,并在构建完成后停止。相反,您需要使用或如下所示的命令在启动容器时指定命令:

  • 问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We

  • 本文向大家介绍Docker如何进入启动容器,包括了Docker如何进入启动容器的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Docker如何进入启动容器,分享给大家,具体如下: 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。 这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。 1、at