这是我第一次在Docker上使用Elasticsearch和Django,我意识到每次我启动docker-compose时,我都必须发出./manage.py search_index --rebuild
来索引Elasticsearch中的所有文档。我一直在尝试自动执行此操作,但似乎仍然不起作用。我的web
服务命令看起来像这样:
web:
build: .
command: bash -c "python manage.py runserver 0.0.0.0:8000 && sleep 60 && python manage.py search_index --rebuild"
...
我添加了sleep 60
,这样它就可以等待Elasticsearch启动,然后再发出rebuild命令。即使这样,也不会发生任何事情,除非我明确地手动发出它。
2条答案
按热度按时间mi7gmzs61#
&&
链中的第二个和第三个命令只会在第一个命令退出后运行,这意味着在Web服务器停止后。您必须为此任务添加另一个服务。更好的是,不用睡觉,你可以
depend_on
Elasticsearch服务。我不是100%肯定这将工作,请张贴您的结果,如果你尝试它。b4lqfgs42#
不工作
所以,使用@Alexandr Tatarinov回答我能够实现自动索引重建。Im docker-compose.yml文件:
使用
healthcheck
,我们可以定义容器是否正在运行,特别是我们需要检查web
容器(我的Django应用程序)和es
容器(我的elasticsearch)rebuild_index
容器上的depends_on
指令将等待web
和es
容器运行。则它将执行该命令。-f
将跳转提示交互,而我们必须使用environment
配置使命令工作所需的数据库信息。编辑-工作版本
由于某种原因,容器
rebuild_index
启动并运行is命令,没有错误,但没有正确生成索引...我认为原因是因为命令需要在同一个容器上启动。一个更干净的工作版本: