【问题标题】:How can I rebuild search index of Elasticsearch in Django automatically on docker startup?如何在 docker 启动时自动重建 Django 中 Elasticsearch 的搜索索引?
【发布时间】:2021-09-08 03:11:26
【问题描述】:

这是我第一次在 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 启动,然后再发出重建命令。即使这样,除非我手动明确地发出它,否则什么也不会发生。

【问题讨论】:

    标签: django bash docker elasticsearch docker-compose


    【解决方案1】:

    && 链中的第二个和第三个命令只会在第一个命令退出后运行,这意味着在网络服务器停止之后。您必须为此任务添加另一个服务。

    rebuild_index:
        build: .
        command: bash -c "sleep 60 && python manage.py search_index --rebuild"
        restart: on-failure
    

    更好的是,您可以depend_on Elasticsearch 服务而不是睡觉。我不能 100% 确定这会奏效,如果您尝试,请发布您的结果。

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

    【讨论】:

    • 是的,这行得通,我也在尝试与 shell 交互。我以为添加stdin_open: truetty: true 会这样做,但事实并非如此。你知道我怎么能做到这一点吗?
    • 抱歉,不确定您要达到的目标。您可能会更好地为此提出新问题。如果有帮助,请接受答案
    • 命令后出现提示
    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多