2017-11-13 2 views
4

셀라리 작업을 사용하는 Django 응용 프로그램을 실행하는 도킹 설정이 있습니다. 셀러리는 Redis를 브로커로 사용합니다.셀러리 작업자가 도커 인스턴스에서 redis에 연결할 수 없습니다.

버전 :

  • 도커 버전 17.09.0-CE, e12f3b9
  • 장고 == 1.9.6
  • 장고를 구축, afdb6d4
  • 고정 표시기-작성 버전 1.15.0를 구축 -celery-beat == 1.0.1
  • 셀러리 == 4.1.0
  • 셀러리 [redis]
  • 레디 스 == 2.10.5

문제 : 6379 :

내 셀러리 노동자가 로컬 호스트에있는 레디 스 용기에 연결하지 못할 것으로 보인다. 지정된 포트의 redis 서버에 telnet 연결할 수 있습니다. 서버에서 redis-server가 실행 중인지 확인할 수 있습니다.

나는 수동 셀러리 고정 표시기 인스턴스에 연결하고 내가 통지받을 명령 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...

주 :

내가 텔넷 수 있어요를 redis 컨테이너에서 redis-server가 실행 중입니다.

다른 것이 있습니까? 나는 꽤 멀리 토끼 구멍 아래로 갔다. 그러나 내가 정말로 단순한 무엇인가 놓치고있는 것처럼 느낀다.

고정 표시기 설정 파일 :

고정 표시기 - compose.common.yml here
당신이 고정 표시기-작성을 사용하는 경우, 당신이 될 수 없습니다 here

+0

시도 'localhost'를'127.0.0.1'로 바꿉니다 – warvariuc

+0

도커 작성기가 있습니까? ile? 그것을 공유하십시오. – Opal

+0

@Opal은 설정 파일을 게시물 하단에 추가했습니다. – Jared

답변

6

고정 표시기 - compose.dev.yml 컨테이너 간 통신에 localhost을 사용하면 컨테이너의 작성 할당 호스트 이름을 사용하게됩니다. 이 경우 redis 컨테이너의 호스트 이름은 redis입니다. services: 아래의 최상위 요소가 기본 호스트 이름입니다.

셀러리가 redis에 연결하려면 redis://redis:6379/0을 시도해야합니다. 프로토콜과 서비스 이름이 같기 때문에 조금 더 자세히 설명해 드리겠습니다. 도커 작성시 redis 서비스 이름을 "butter-pecan-redis"로 지정한 경우 redis://butter-pecan-redis:6379/0을 대신 사용하십시오.

또한 docker-compose.dev.yml은 일반적인 네트워크에서 샐러리와 redis를 가지지 않으므로 서로를 볼 수 없게됩니다. 나는 각각의 호스트 이름을 해결할 수 있도록 적어도 하나의 네트워크를 공유해야한다고 생각한다.

Networking in docker-compose에는 처음 몇 개 단락에 도커 작성 기능이 포함되어 있습니다.볼 yml.

+0

그들은 공통 네트워크를 공유하지 않아서이 문제를 해결하는 데 도움이되었습니다. – Jared

2

도커 작성 파일에 linkdepends_on 섹션을 추가 한 다음 호스트 이름별로 컨테이너를 참조해야 할 수 있습니다.

업데이트 고정 표시기-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 

그런 다음, URL이 레디 스에 포스트 그레스를 구성, memcached와 등과 :

관련 문제