I have a django channels container and a celery worker and I'm trying to connect to my django channels container inside the celery container, however, I'm finding it difficulty to connect. I have a django server running on http://127.0.0.1:8000/. This is how my docker-compose file looks like
web:
restart: always
tty: true
build: ./web/
working_dir: /data/web/fileshiffty
expose:
- "8000"
ports:
- "8000:8000"
links:
- postgres:postgres
- redis:redis
env_file: env
volumes:
- ./web:/data/web
command: bash -c "python3 manage.py runserver 0.0.0.0:8000"
postgres:
restart: always
image: postgres:latest
volumes_from:
- data
volumes:
- ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./backups/postgresql:/backup
env_file:
- env
expose:
- "5432"
redis:
restart: always
image: redis:latest
expose:
- "6379"
worker:
build: ./web/
working_dir: /data/web/fileshiffty
command: bash -c "celery -A fileshiffty worker --loglevel=DEBUG"
volumes:
- ./web:/data/web
links:
- postgres:postgres
- redis:redis
- web:web
data:
restart: always
image: alpine
volumes:
- /var/lib/postgresql
command: "true"
However, inside on my celery tasks it requires it to connect to a web socket with url ws://127.0.0.1:8000/ws/converter/public/
. This is how my tasks looks like
# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task
import img2pdf
import os
import websocket
import json
import boto
from boto.s3.key import Key
@shared_task
def convert_file_to_pdf(file_name_on_cdn):
ws = websocket.WebSocket()
ws.connect('ws://web/ws/converter/public/')
ws.send(json.dumps({
'message': '{}'.format(file_name_on_cdn),
'progress': 0}))
# some other stuff
However, I keep getting the following error when the task is run
worker_1 | [2018-03-21 16:19:03,392: ERROR/ForkPoolWorker-2] Task api.tasks.convert_file_to_pdf[2fb26db9-7dd5-4b57-9242-fd61e743952d] raised unexpected: ConnectionRefusedError(111, 'Connection refused')
worker_1 | Traceback (most recent call last):
worker_1 | File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 374, in trace_task
worker_1 | R = retval = fun(*args, **kwargs)
worker_1 | File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 629, in __protected_call__
worker_1 | return self.run(*args, **kwargs)
worker_1 | File "/data/web/fileshiffty/api/tasks.py", line 30, in convert_file_to_pdf
worker_1 | ws.connect('ws://web/ws/converter/public/')
worker_1 | File "/usr/local/lib/python3.6/site-packages/websocket/_core.py", line 217, in connect
worker_1 | options.pop('socket', None))
worker_1 | File "/usr/local/lib/python3.6/site-packages/websocket/_http.py", line 70, in connect
worker_1 | sock = _open_socket(addrinfo_list, options.sockopt, options.timeout)
worker_1 | File "/usr/local/lib/python3.6/site-packages/websocket/_http.py", line 131, in _open_socket
worker_1 | raise err
worker_1 | File "/usr/local/lib/python3.6/site-packages/websocket/_http.py", line 116, in _open_socket
worker_1 | sock.connect(address)
worker_1 | ConnectionRefusedError: [Errno 111] Connection refused
It's clear that it cannot connect to the url. I even tried setting ws.connect('ws://web/ws/converter/public/')
, however, that doesn't seem to be working either. Any help would be appreciated. Been trying to figure out what's wrong for many hours