当前位置: 首页 > 知识库问答 >
问题:

Docker-Compose:依赖容器在依赖的MySQL容器完全初始化之前运行[重复]

羊舌墨一
2023-03-14

我有一个docker-compose文件,如下所示,它有两个容器。一个是MySQL DB,另一个是读/写DB的Python爬虫应用程序。当我执行docker-compose up时,我看到:

  1. 已生成DB容器
  2. 然后生成应用程序容器
  3. 然后运行应用程序容器上的CMD(例如启动我的爬网程序)
  4. 然后根据docker-compose文件中的环境变量在DB容器中初始化我的数据库。

我的问题是为什么我的爬虫脚本在我的数据库在DB容器中创建之前运行?如何确保在我的爬虫脚本运行之前数据库已经创建?

version: '3.7' 
services: 
    db:
        image: mysql:8
        restart: always
        environment: 
            MYSQL_DATABASE: my-database-name
            MYSQL_USER: root
            MYSQL_ROOT_PASSWORD: password
            MYSQL_PASSWORD: password
        ports:
            - "3308:3306"
        command: --default-authentication-plugin=mysql_native_password
    app:
        build:
            context: ./
            dockerfile: Dockerfile-crawler-dev
        depends_on: 
            - db
        environment: 
            MYSQL_DATABASE: my-database-name
            MYSQL_USER: root
            MYSQL_ROOT_PASSWORD: password
            MYSQL_PASSWORD: password
            MYSQL_HOST: db
            MYSQL_PORT: 3306
        volumes:
            - ./:/crawler/

共有1个答案

葛修真
2023-03-14

最好的选项用于仅从代码中检查。此外,如果您可以使用compose2,但请阅读文档:“使用depends_on时有几件事要注意:

depends_on在启动web之前不会等待db和redis“就绪”--仅在它们已经启动之前。如果需要等待服务就绪,请参阅控制启动顺序以获得有关此问题的更多信息以及解决此问题的策略。

版本3不再支持depends_on的条件形式。

 类似资料:
  • 问题内容: 我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker Hub上的文档,我将文件挂载在其中,但无济于事。 我的撰写文件如下: 的内容只有1个文件: 一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。 有人可以在这里看到一些明显的问题吗

  • 我希望有人能帮助我理解我在使用WSL2使用Docker Desktop for Windows构建多容器环境时遇到的错误(不要认为这些细节很重要,但你永远不知道) 我有一个< code>docker-compose.yml脚本,它构建了许多链接在一起的容器。通过注释和取消注释特定的容器,我可以很轻松地让它工作,但这似乎与我理解的< code>docker compose的工作方式背道而驰。 在任何

  • 容器和依赖注入 5.1版本正式引入了容器的概念,用来更方便的管理类依赖及运行依赖注入。 5.0版本已经支持依赖注入的,依赖注入和容器没有必然关系 容器类的工作由think\Container类完成,但大多数情况我们只需要通过app助手函数即可完成大部分操作。 依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于

  • 当我试图在Docker容器内使用Java Spring中的WebClient连接到REST服务时,我遇到了一个错误。我在想有没有人能告诉我问题出在哪里? DockerFile:

  • 依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象。 Martin 的文章 已经解释了 DI 容器为什么很有用。 这里我们主要讲解 Yii 提供的 DI 容器的使用方法。 依赖注入(Dependency Injection) Yii 通过 yii\di\Container 类提供 DI 容器特性。 它支持如下几种类型的依赖注入:

  • 问题内容: 我想使用docker-compose启动服务并保持容器运行,以便我可以通过“ docker inspect”获取其IP地址。但是,容器始终在启动后立即退出。 我试图在docker-compose.yml中添加“ command:[“ sleep”,“ 60”]“和其他内容,但是每当我添加带有” command:…“的行时,我都无法调用” docker-compose up“因为我将收到