如何仅在另一个活动映像完成任务后运行docker映像?

如何仅在另一个活动映像完成任务后运行docker映像?,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有以下配置: services: db: image: mysql:5.6 command: --default-authentication-plugin=mysql_native_password --sql-mode="" volumes: - ./schema:/docker-entrypoint-initdb.d ports: - 3309:3306 environment: MYSQ

我有以下配置:

services:
  db:
    image: mysql:5.6
    command: --default-authentication-plugin=mysql_native_password --sql-mode=""
    volumes:
      - ./schema:/docker-entrypoint-initdb.d
    ports:
      - 3309:3306
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: test    

  migration-tool:
        depends_on:
          - db
        build:
            context: ../MigrationTool.MigrationTool/
            dockerfile: Dockerfile.migrate
db服务执行一些长时间运行的数据库插入,但迁移工具服务还希望在db服务映像上创建一个数据库(带有插入),这将导致迁移工具服务出现一些异常,确切地说,mysql db映像拒绝来自迁移工具映像的连接。 一切正常,只有在db服务插入完成之后,但此操作通常需要几分钟

我需要一种方法来控制第二个映像的开始(迁移工具),只有在第一个映像中完成所有插入之后。或者,对于所描述的场景,可能有更好的解决方案。谢谢。

您可以创建一个,例如:

healthcheck:
测试:[“CMD”、“mysqladmin”、“ping”、“-h”、“localhost”]
间隔时间:1m30s
超时时间:10秒
重试次数:3次
启动时间:40秒

Compose在这方面做得并不好:它没有内置的支持来等待其他容器准备就绪,或者等待长时间运行的容器通过某个点,并且它通常希望所有容器都是长时间运行的,而不是面向任务的。可能会给你一些灵感;这些技术通常可以在撰写上下文之外重用。这是否有用