This question already has answers here:
Docker Compose wait for container X before starting Y

(17个答案)


在10个月前关闭。




我有2个服务:服务-后台服务-webapi 。这些已在 docker-compose 中注册。需要先启动服务后台。只有这样才能启动service-webapi。这是固定订单。我在docker-compose.yml中有以下配置:
networks:
   my-fantastic-network

services:
   background-service:
      build: backgroundproject
      networks:
         my-fantastic-network:
            aliases:
               -background-service

webapi-service:
   build: webapi
   depends_on:
     -background-service
   networks:
      my-fantastic-network:
         aliases:
            -webapi-service

我认为这足以让webapi-service等待后台服务,但是这一服务启动得太早了,完全搞砸了。

我的后台服务具有以下文件结构的日志文件:server / database / logs / startup.log
如果日志文件包含文本“数据库初始化成功”,则后台服务已准备就绪,并且webapi服务可以安全启动。我可以使用Linux grep 函数来检查我的日志文件是否包含此特定文本。但是我不知道如何用docker-compose做到这一点。

我做了一些研究,并在docker-compose中使用了 healthcheck 属性,但我对此不太熟悉。

有人能帮我吗?

最佳答案

看看非常好的docker文档:
https://docs.docker.com/compose/compose-file/#healthcheck

但这也许不是适合您的解决方案。
我建议调查一下:

https://docs.docker.com/compose/startup-order/

这是一个简单实用的解决方案,在镜像中带有一个附加脚本,该脚本首先将等待与数据库的连接,然后将启动实际的启动脚本。

希望这可以帮助。

10-07 21:10