Ruby on rails 在应用服务器启动之前,如何在docker compose项目中运行mongorestore?

Ruby on rails 在应用服务器启动之前,如何在docker compose项目中运行mongorestore?,ruby-on-rails,mongodb,docker,docker-compose,Ruby On Rails,Mongodb,Docker,Docker Compose,我有docker撰写的Rails项目依赖于mongo。在dockerfile中的CMD运行rails服务器之前,我需要在构建期间运行mongorestore。我怎么能做到 我试过了,但没能启动mongorestore 服务器未启动表示未找到启动它所需的集合。因此,在启动服务器之前,有必要安装mongorestore Dockerfile FROM ruby:2.3.0 RUN apt-get update -qq && apt-get install -y nodejs npm

我有docker撰写的Rails项目依赖于mongo。在dockerfile中的CMD运行rails服务器之前,我需要在构建期间运行mongorestore。我怎么能做到

我试过了,但没能启动mongorestore

服务器未启动表示未找到启动它所需的集合。因此,在启动服务器之前,有必要安装mongorestore

Dockerfile

FROM ruby:2.3.0

RUN apt-get update -qq && apt-get install -y nodejs npm
RUN npm install --global coffeescript
WORKDIR /
COPY Gemfile /Gemfile
COPY Gemfile.lock /Gemfile.lock

RUN mkdir -p /log && touch /log/development.log
RUN gem install bundler -v "1.17.3"
RUN bundle install
COPY . /
CMD ["sh", "-c", "bundle exec padrino start"]
docker compose.yml

版本:“3.4”
服务:
蒙戈:
图片:mongo:3.2.4
容器名称:'tickets mongo'
卷数:
-./mongorestore.sh:/docker-entrypoint-initdb.d/mongorestore.sh
-./db:/db
端口:
- 27017:27017
redis:
图片:redis:alpine
容器名称:redis
取决于:
-蒙戈
端口:
- 6379:6379
卷数:
-redis\u数据:/var/lib/redis
弹性搜索:
图片:elasticsearch:7.9.2
容器名称:'tickets elasticsearch'
环境:
-discovery.type=单个节点
取决于:
-雷迪斯
端口:
- 9200:9200
卷数:
-elasticsearch\u数据:/usr/share/elasticsearch/data
应用程序工作人员:
环境文件:
-.env_development.env
生成:。
集装箱名称:票务工人
取决于:
-弹性搜索
链接:
-蒙哥:蒙哥
-redis:redis
-elasticsearch:elasticsearch
应用程序:
环境文件:
-.env_development.env
生成:。
容器名称:票证网站
取决于:
-应用程序工作者
链接:
-蒙哥:蒙哥
-redis:redis
-elasticsearch:elasticsearch
端口:
- 3000:3000
卷数:
mongo:{}
redis_数据:{}
elasticsearch_数据:{}
更新: 我担心
依赖于
链接
在这种情况下可能不起作用。原因是,Compose在启动
app worker
app
之前确实启动了
mongo
。但它不会等到
mongo
服务处于
READY
状态时才启动从属服务

基本上,您需要找到一种方法,告诉Compose等待
mongo
服务处于就绪状态

解决方案如中所述


我希望这对你有帮助。谢谢你的回答。。我会让你知道它是否有效。您的问题的答案是
app
具有独立的后台服务器
app-worker
app
依赖于
app-worker
运行。他们本质上是一样的,所以有着相同的背景。情况如何?你还在面对这个问题吗?是的,这并没有解决问题。。。我正在做恢复后,它启动,我担心这会发生。我已经用一个新的解决方案更新了我的答案。谢谢查看