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

在版本3中是否有docker-compose服务初始化可用?[副本]

方飞鸣
2023-03-14

我想为docker-compose服务设置一个启动的初始化序列。类似服务“web”应该等待“db”在docker-compose中完成。

我想以前使用的是depends_on,但从版本3开始,depends_on'不再强制docker服务启动序列,因为docker希望在服务独立失败的任何时刻启动服务。我想这是一个很好的理由删除之前的等待功能。

但是,如果这是真的,还有什么替代方案来实现初始化序列,在初始化序列中,我不想启动'web'服务,直到'db'完全初始化并完成启动。

如果我对这个题目的理解有误,请指正。

共有1个答案

曹华荣
2023-03-14

docker compose中的依赖支持只是对开始顺序的依赖,所以实际上没有多大用处。

最好的方法是在依赖容器之间共享一个卷,并让依赖容器等待共享卷上的一个文件被另一个容器触及,然后再继续它需要做的事情。

例如,假设您正在还原一个容器上的数据库,并且在数据库启动之前不希望app服务器在另一个容器中启动:

在依赖容器中,用等待入口点包装您的入口点:

#!/bin/bash

echo "Waiting for the other container"

Here use inotify to wait for a touch on a shared volume file

echo "Other container is up"

source /entrypoint.sh

在另一个容器入口点的末尾,只需触摸共享卷文件

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

  • 最近,当我在LeetCode上做一些练习时,我发现了一些绝妙的解决方案。它使用对象o引用数组,我猜可能是因为在Java,所有的东西都是Object。但当我尝试这种方法时,它出错了。所以我尝试了所有的方法来初始化数组,我想看看它们之间的区别,就像下面这样 只有o3会编译一个错误。我不知道是不是因为初始化的方式。我知道当我使用静态初始化时,它会先分配内存,当使用动态初始化时,它不会。它们之间的其他差异

  • 场景:我在Spring中开发了一个使用mysql 8数据库的微服务。这个数据库必须被初始化(创建一个数据库、一些表和数据)。在我的主机上,我用data.sql和schema.sql脚本初始化了数据库。问题是,我必须设置: 第一次执行。这将以我想要的方式初始化我的数据库。对于以后的运行,我必须对该命令进行注释。非常难看的解决方案,但我找不到更好的解决方案,我现在没有得到这个问题的答案。我认为测试它是

  • 前文提到的Dockerfile 可以让用户管理一个单独的容器,那幺如果我要管理多个容器呢,例如:我需要管理一个Web应用的同时还要加上其后端的数据库服务容器呢?Compose就是这样的一个工具。让我们看下官网对Compose的定义: Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可

  • 那么有没有办法从其他容器的服务状态启动容器??

  • 接下来的代码例子揭示了,怎样去把Flask-SocketIO引入到Flask应用: from flask import Flask, render_template from flask_socketio import SocketIO app = Flask(__name__) app.configp['SECRET_KEY'] = 'secret!' socketio