gpt4 book ai didi

django - 在 django 应用程序的 Docker 容器中处理 RACE CONDITION,其中包括 postgres、nginx、celery、redis、elasticsearch

转载 作者:可可西里 更新时间:2023-11-01 11:23:44 25 4
gpt4 key购买 nike

我是 docker 的新手。我在同时部署多个容器时遇到问题,它正在发生竞争情况。每次我输入 docker-compose up --build 命令时,elasticsearch 或 redis 首先启动,数据库启动和退出时出现错误代码 0 以及 celery 和 nginx。我尝试使用“ sleep ”命令,但没有运气(也许我错过了什么)。这是我的 docker-compose.yml 文件 -

version: "3"

services:
db:
image: postgres:9.6-alpine
container_name: myblogdb
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
volumes:
- myblogdb_data:/var/lib/postgresql/data/
ports:
- "4949:5432"

web:
build: ./app
command: sh -c "gunicorn djangoApp.wsgi:application --bind 0.0.0.0:8000"
volumes:
- ./app:/usr/src/app/
- my_blog_static_volume:/usr/src/app/djangoApp/settings/staticfiles
- my_blog_media_volume:/usr/src/app/mediafiles
ports:
- "8000:8000"
depends_on:
- db
- redis
- es

nginx:
restart: always
build: ./nginx
volumes:
- my_blog_static_volume:/usr/src/app/djangoApp/settings/staticfiles
- my_blog_media_volume:/usr/src/app/mediafiles
ports:
- "1337:80"
depends_on:
- web


redis:
image: "redis:alpine"

es:
image: elasticsearch:5.6.15-alpine
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256M -Xmx256M"
volumes:
- my_blog_esdata:/usr/share/elasticsearch/data/
ports:
- "9200:9200"

celery:
restart: always
build: ./app
command: sh -c "celery -A djangoApp worker -l info"
volumes:
- ./app:/usr/src/app/
depends_on:
- db
- redis
- web


celery-beat:
restart: always
build: ./app
command: sh -c "celery -A djangoApp beat -l info"
volumes:
- ./app:/usr/src/app/
depends_on:
- db
- redis
- web


volumes:
myblogdb_data:
my_blog_static_volume:
my_blog_media_volume:
my_blog_esdata:

如果我在这里遗漏了什么,请告诉我。谢谢

最佳答案

您需要添加类似wait-for-it 的脚本或 wait-for为了control startup and shutdown order in compose这基本上告诉一个服务在运行启动命令之前等待另一个服务。

因此,如果您希望 Django 等待 PostgreSQL,docker-compose 中的 command 将是:

["./wait-for", "db:5432", "--", "gunicorn", "djangoApp.wsgi:application", "--bind", "0.0.0.0:8000"]

下面有完整的解释answer ,答案针对 MySQL 和 Golang 进行了描述,但同样的概念也适用于您的情况

关于django - 在 django 应用程序的 Docker 容器中处理 RACE CONDITION,其中包括 postgres、nginx、celery、redis、elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55217968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com