芹菜工人无法连接到docker实例上的redis
我有一个dockerized安装程序运行一个Django应用程序,我在其中使用芹菜任务。 Celery使用Redis作为经纪人。
版本:
- Docker版本17.09.0-ce,编译afdb6d4
- docker-compose版本1.15.0,构builde12f3b9
- Django的== 1.9.6
- Django的芹菜拍== 1.0.1
- 芹菜== 4.1.0
- 芹菜[redis的]
- Redis的== 2.10.5
问题:
我的芹菜工人似乎无法连接到位于localhost的redis容器:6379。 我可以远程login指定端口上的redis服务器。 我能够validation在容器上运行的redis服务器。
当我手动连接到芹菜docker实例,并尝试使用命令celery -A backend worker -l info
创build一个工人celery -A backend worker -l info
我得到的通知:
[2017-11-13 18:07:50,937: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 99 connecting to localhost:6379. Cannot assign requested address.. Trying again in 4.00 seconds...
笔记:
我能够远程login到端口6379上的redis容器。在redis容器上,redis-server正在运行。
还有什么我失踪? 我已经走了很远的兔子洞,但觉得我错过了一些非常简单的事情。
DOCKERconfiguration文件:
docker-compose.common.yml 在这里
docker-compose.dev.yml 在这里
当你使用docker-compose的时候,你不会使用localhost
进行容器间通信,你将使用容器的组合分配主机名。 在这种情况下,redis容器的主机名是redis
。 services:
下的顶级元素services:
是您的默认主机名。
所以芹菜连接到redis,你应该尝试redis://redis:6379/0
。 由于协议和服务名称是相同的,我将详细说明一下:如果您在docker-compose中将redis服务命名为“butter-pecan-redis”,则可以使用redis://butter-pecan-redis:6379/0
。
此外,docker-compose.dev.yml在公用networking上似乎没有芹菜和redis,这可能会导致它们无法看到对方。 我相信他们需要共享至less一个共同的networking才能解决他们各自的主机名称。
docker-compose中的networking在第一部分中有一个例子,用docker-compose.yml来看看。
您可能需要将链接和depends_on部分添加到您的泊坞窗撰写文件中,然后通过主机名引用容器。
更新了docker-compose.yml:
version: '2.1' services: db: image: postgres memcached: image: memcached redis: image: redis ports: - '6379:6379' backend-base: build: context: . dockerfile: backend/Dockerfile-base image: "/backend:base" backend: build: context: . dockerfile: backend/Dockerfile image: "/backend:${ENV:-local}" command: ./wait-for-it.sh db:5432 -- gunicorn backend.wsgi:application -b 0.0.0.0:8000 -k gevent -w 3 ports: - 8000 links: - db - redis - memcached depends_on: - db - redis - memcached celery: image: "/backend:${ENV:-local}" command: ./wait-for-it.sh db:5432 -- celery worker -E -B --loglevel=INFO --concurrency=1 environment: C_FORCE_ROOT: "yes" links: - db - redis - memcached depends_on: - db - redis - memcached frontend-base: build: context: . dockerfile: frontend/Dockerfile-base args: NPM_REGISTRY: http://.view.build PACKAGE_INSTALLER: yarn image: "/frontend:base" links: - db - redis - memcached depends_on: - db - redis - memcached frontend: build: context: . dockerfile: frontend/Dockerfile image: "/frontend:${ENV:-local}" command: 'bash -c ''gulp''' working_dir: /app/user environment: PORT: 3000 links: - db - redis - memcached depends_on: - db - redis - memcached
然后将urlconfiguration为redis,postgres,memcached等:
-
redis://redis:6379/0
-
postgres://user:pass@db:5432/database