Docker Django、redis 和 celery conf
Docker Django, redis and celery conf
我不知道我遗漏了什么部分,但是当我 运行 docker-compose up --build 时 celery 没有连接到 redis
错误:无法连接到 redis://127.0.0.1:6379/0: 错误 111 连接到 127.0.0.1:
6379。连接被拒绝。
这是我的文件docker-compose.yml
version: '3'
services:
web:
build: .
image: resolution
depends_on:
- db
- redis
- celery
command: bash -c "python3 /code/manage.py migrate && python3 /code/manage.py initialsetup && python3 /code/manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db:db
- redis:redis
- celery:celery
restart: always
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- PGHOST=trust
- PGPORT=5432
db:
image: postgres:latest
environment:
POSTGRES_DB: 'postgres'
POSTGRES_PASSWORD: 'postgres'
POSTGRES_USER: 'postgres'
POSTGRES_HOST: 'trust'
redis:
image: "redis:alpine"
ports:
- "6379:6379"
restart: on-failure
celery:
image: resolution
command: celery -A mayan worker -l info
environment:
- DJANGO_SETTINGS_MODULE=mayan.settings.production
volumes:
- .:/code
depends_on:
- db
- redis
links:
- redis:redis
restart: on-failure
celery
和 redis
是 运行 在不同的容器中。
根据您分享的错误消息,您的 celery
很可能正在尝试连接到 localhost
以到达 RedisDB
,而 不是 在本地主机上。
搜索包含 CELERY_BROKER_URL
和 CELERY_RESULT_BACKEND
值的芹菜配置文件。它们很可能看起来像这样:
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
它们应该看起来像这样,指向您在撰写文件中定义的 redis 服务名称:
CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
如果没有这样的配置,直接搜索初始化Celery实例的地方,确保是这样的:
app = Celery('server', broker='redis://redis:6379/0')
我不知道我遗漏了什么部分,但是当我 运行 docker-compose up --build 时 celery 没有连接到 redis 错误:无法连接到 redis://127.0.0.1:6379/0: 错误 111 连接到 127.0.0.1: 6379。连接被拒绝。
这是我的文件docker-compose.yml
version: '3'
services:
web:
build: .
image: resolution
depends_on:
- db
- redis
- celery
command: bash -c "python3 /code/manage.py migrate && python3 /code/manage.py initialsetup && python3 /code/manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db:db
- redis:redis
- celery:celery
restart: always
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- PGHOST=trust
- PGPORT=5432
db:
image: postgres:latest
environment:
POSTGRES_DB: 'postgres'
POSTGRES_PASSWORD: 'postgres'
POSTGRES_USER: 'postgres'
POSTGRES_HOST: 'trust'
redis:
image: "redis:alpine"
ports:
- "6379:6379"
restart: on-failure
celery:
image: resolution
command: celery -A mayan worker -l info
environment:
- DJANGO_SETTINGS_MODULE=mayan.settings.production
volumes:
- .:/code
depends_on:
- db
- redis
links:
- redis:redis
restart: on-failure
celery
和 redis
是 运行 在不同的容器中。
根据您分享的错误消息,您的 celery
很可能正在尝试连接到 localhost
以到达 RedisDB
,而 不是 在本地主机上。
搜索包含 CELERY_BROKER_URL
和 CELERY_RESULT_BACKEND
值的芹菜配置文件。它们很可能看起来像这样:
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
它们应该看起来像这样,指向您在撰写文件中定义的 redis 服务名称:
CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
如果没有这样的配置,直接搜索初始化Celery实例的地方,确保是这样的:
app = Celery('server', broker='redis://redis:6379/0')