问候 我一直在开发可在Redis,PostgreSQL,Celery,RabbitMQ上运行的Django应用程序。 我已经编写了一个docker-compose,可以在单独的容器中运行所有这些服务。
这是我的docker-compose.yml
version: "3.2"
services:
app:
build:
context: .
image: &app app
ports:
- "8000:8000"
env_file: &envfile
- env.env
volumes:
- ./app:/app
environment:
- DB_HOST=db
command: >
sh -c "python manage.py wait_for_db &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
depends_on:
- db
- redis
- broker
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
db:
image: postgres:12-alpine
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
worker:
build: .
image: *app
restart: always
env_file: *envfile
command: ["celery", "worker", "--app=worker.worker.app", "--concurrency=1", "--hostname=worker@%h", "--loglevel=INFO"]
volumes:
- ./app:/app
depends_on:
- broker
- redis
- db
broker:
image: rabbitmq:3
env_file: *envfile
ports:
- 5672:5672
flower:
image: zoomeranalytics/flower:0.9.1-4.0.2
restart: "no"
env_file: *envfile
ports:
- "5555:5555"
depends_on:
- broker
我的应用程序运行正常,并且容器似乎正在运行,当我将异步作业推送到工作容器时,出现了问题。工作容器开始工作,开始处理,我正在尝试访问工作容器中的数据库,但这给了我以下错误-
任务[640127f3-7769-4757-8c33-8de9052ca92c]引发意外情况:OperationalError('无法连接到服务器:没有这样的文件或目录\ n \ t服务器在本地运行并接受\ n \ t连接Unix域套接字“ /tmp/.s.PGSQL.5432”?\ n')
我了解到我的工作容器正在尝试访问数据库,但无法找到它,有人可以帮我通过工作容器访问我的数据库容器吗?
我尝试了 depends_on ,链接,但似乎没有任何效果。
答案 0 :(得分:2)
感谢,感谢我的队友。
我错过了在工作容器中提供环境变量的方法,瞧!
environment:
- DB_HOST=db