首页 > 解决方案 > 如何仅在另一个活动图像完成任务后才运行 docker 图像?

问题描述

我有以下配置:

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 image 拒绝来自 migraton-tool 图像的连接。一切正常,只有在数据库服务插入完成后,但此操作通常需要几分钟。

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

标签: dockerdocker-composedockerfile

解决方案


您可以创建一个healthcheck,例如:

healthcheck:
  test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

推荐阅读