django - 如何在 docker 启动时自动重建 Django 中 Elasticsearch 的搜索索引?

标签 django bash docker elasticsearch docker-compose

这是我第一次在 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_index:
    build: .
    command: bash -c "sleep 60 && python manage.py search_index --rebuild"
    restart: on-failure

更好的是,您可以依赖 Elasticsearch 服务,而不是 sleep 。我不能 100% 确定这会起作用,如果您尝试过,请发布您的结果。

rebuild_index:
    build: .
    command: bash -c "python manage.py search_index --rebuild"
    restart: on-failure
    depends_on:
        elasticsearch:
            condition: service_started

关于django - 如何在 docker 启动时自动重建 Django 中 Elasticsearch 的搜索索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68118878/

相关文章:

python - 'dict' 对象没有属性 'HTTP_REFERER'

Django - 检查两个密码哈希是否具有相同的原始密码

python - Django - 通过表单更新用户实例

php - 批量清除php入侵的Bash脚本

docker - 如何在 docker 容器中运行 cron 作业?

docker - 保留所有kafka主题的数据并注入(inject)不同的实例

django - **或pow()不受支持的操作数类型: 'tuple' and 'dict'

linux - 如何将 bash/awk 命令放入变量(不是命令的输出)

linux - bash 条件表达式 -x 可以看作是 if 条件吗?

azure - Azure 容器实例是否适合运行具有简单输出的简单命令?