복붙노트

[REDIS] 레디 스 + 도커 + 장고 - 오류 111 연결 거부

REDIS

레디 스 + 도커 + 장고 - 오류 111 연결 거부

나는 도커 작성을 사용하여 내 장고 프로젝트에 대한 셀러리의 브로커로 레디 스를 사용하는 것을 시도하고있다. 나는 정확히 내가 잘못을 무슨 짓을했는지 알아낼 수는 없지만 콘솔 로그 메시지 (나는 고정 표시기의 PS를 수행 할 때, 나는 용기가 실행 볼 수 있습니다, 참과) 레디 스 연결을 실행하고 받아들이는 것을 말해 있다는 사실에도 불구하고 나는 여전히 연결에 대한 오류가 거부되고 얻을. 난 한

docker exec -it <redis_container_name> redis-cli
ping

그리고 톱 응답 PONG는 것을.

여기 내 settings.py의 셀러리 설정은 다음과 같습니다

BROKER_URL = 'redis://localhost:6379/0'
BROKER_TRANSPORT = 'redis'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = "UTC"

여기 내 고정 표시기 - compose.yml의 레디 스 컨테이너 설정은 다음과 같습니다

redis:
    image: redis
    ports:
        - "6379:6379"

내 웹 컨테이너도를 레디 스 컨테이너를 연결하는 기억했다. 나는 잘 서버를 시작할 수 있습니다,하지만 난 사이트에 아무것도를 업로드하려고 할 때 연결이 오류를 거부 얻을. 무엇 정확히 잘못이에요?

편집 : 나는 내 settings.py으로 localhost 대신 VM의 IP를 사용해야하는 것처럼 보이지 않도록, 8000 : 내가 로컬 호스트에서 브라우저 및 액세스 내 사이트로 이동할 수 있습니다 앞으로 있도록 포트에 VBoxManage를 사용하는 기억했다.

편집 2 : 나는 고정 표시기 기계 VM 또는 레디 스 컨테이너의 IP 주소의 IP 주소로 설정에서 localhost를 교체하는 경우는, 다음 무슨 일 난을 업로드 할 때 정말 빨리 내 웹 사이트에 잘못된 성공 메시지를 얻을 수 있다는 것입니다 파일,하지만 아무것도 실제로 업로드되지됩니다. 기저 업로드 기능은 insertIntoDatabase (), 지연을 사용한다.

해결법

  1. ==============================

    1.장고는 레디 스 용기에 연결되는 별도의 용기에 실행하고 있습니까? 그렇다면, 당신은 장고는 레디 스 컨테이너에 연결하는 데 사용해야하는 IP와 포트 일부 환경 변수를 가져야한다. 를 사용하도록 설정 BROKER_URL는 IP를 레디 스 및 포트 ENV는 바르 당신이 사업에 있어야합니다. RESULT_BACKEND 저두 요.

    장고는 레디 스 용기에 연결되는 별도의 용기에 실행하고 있습니까? 그렇다면, 당신은 장고는 레디 스 컨테이너에 연결하는 데 사용해야하는 IP와 포트 일부 환경 변수를 가져야한다. 를 사용하도록 설정 BROKER_URL는 IP를 레디 스 및 포트 ENV는 바르 당신이 사업에 있어야합니다. RESULT_BACKEND 저두 요.

    ENV의 바르에 대한 참조 문서는 여기에 있습니다 : 도커 작성 문서

    여기에 우리가 자동으로 추가 ENV는 OfferUp에서 우리의 프로젝트 중 하나에 바르 사용하는 방법에 대한 몇 가지 예제 코드는 다음과 같습니다

    BROKER_TRANSPORT = "redis"
    _REDIS_LOCATION = 'redis://{}:{}'.format(os.environ.get("REDIS_PORT_6379_TCP_ADDR"), os.environ.get("REDIS_PORT_6379_TCP_PORT"))
    BROKER_URL = _REDIS_LOCATION + "/0"
    CELERY_RESULT_BACKEND = _REDIS_LOCATION + "/1"
    
  2. ==============================

    2.난 그냥 그것으로 인해이 settings.py에 CELERY_BROKER_URL로 변경 BROKER_URL에 필요했던이 튜토리얼에 V4에 버전 3.1에서 셀러리를 업데이트하고 따라 비슷한 문제가 있었다

    난 그냥 그것으로 인해이 settings.py에 CELERY_BROKER_URL로 변경 BROKER_URL에 필요했던이 튜토리얼에 V4에 버전 3.1에서 셀러리를 업데이트하고 따라 비슷한 문제가 있었다

    settings.py 부분

    CELERY_BROKER_URL = 'redis://cache:6379/0'
    CELERY_RESULT_BACKEND = 'redis://cache:6379/0'
    

    부두 노동자 - compose.yml 부분

    version: '2'
    services:
      web:
        container_name: django-container
        *******
        other options
        *******
    
        depends_on:
          - cache
          - db
    
      cache:
        container_name: redis-container
        restart: always
        image: redis:latest
    
  3. from https://stackoverflow.com/questions/32615370/redisdockerdjango-error-111-connection-refused by cc-by-sa and MIT license