2

I'm trying to set up a Docker container with Django. My Docker file is:

FROM python:3.7-alpine
MAINTAINER Freshness Productions

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache postgresql-client
RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user

RUN rabbitmqctl add_user test testpass1
RUN rabbitmqctl add_vhost myvhost
RUN rabbitmqctl set_permissions -p myvhost test ".*" ".*" ".*"
RUN rabbitmq-server

And my docker-compose.yml is:

version: "3"

services:
  app:
    build:
      context: .
    image: &app app
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py wait_for_db &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000
             export C_FORCE_ROOT='true'
             celery -A app beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler"
    env_file: &envfile
      - env.env
    depends_on:
      - db
      - broker

  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=supersecretpassword

  worker:
    build: .
    image: *app
    restart: "no"
    env_file: *envfile
    command: sh -c "celery -A app worker --loglevel=info"
    volumes:
      - ./app:/app
    depends_on:
      - broker

  broker:
    image: rabbitmq:3
    env_file: *envfile
    ports:
      - 5672:5672

I don't see what I need to do - other than I'm using two different images in my docker-compose? Does that matter? I get the error:

ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

when I try to run docker-compose up

4
  • It seems that you are trying to connect to a localhost of RabbitMQ. Try connect to broker instead of localhost (127.0.0.1) and see if problem exists Commented Apr 6, 2019 at 20:07
  • I'm not sure how? I have an env variable CELERY_BROKER=amqp://guest:guest@broker:5672 in my envfile Commented Apr 6, 2019 at 20:15
  • Did you find a solution to this?> Commented May 18, 2020 at 19:34
  • With your docker settings, I get this error /bin/sh: rabbitmqctl: not found ERROR: Service 'worker' failed to build: The command '/bin/sh -c rabbitmqctl add_user test testpass1' returned a non-zero code: 127 Could you please help? Commented May 19, 2020 at 17:37

1 Answer 1

1

There you can find this configuration it works perfectly on with RabbitMQ, Python Django, MYQL, and Celery and Celery Beat.

don't forget to up-vote if you like. Thanks.

docker-compose.yml

version: "3.7"
services:

django:
    container_name: django_python
    image: python:3.6
    command: bash -c "pip3 install -r requirements.txt && python manage.py runserver 0.0.0.0:8000"
    volumes:
        - ${APP_PATH}var/www/api.mylaser.fr/mylazer_backend:/app
        - ${APP_PATH}var/www/static.mylaser.fr:/app/static
    depends_on:
        - mysql
    working_dir: /app
    environment:
        - PYTHONUNBUFFERED=1
        - MYSQL_HOST=mysql
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - CELERY_BROKER=${CELERY_BROKER}
mysql:
    container_name: python_mysql
    image: mariadb:latest
    #ports:
    #    - "3306:3306"
    volumes:
        - ${APP_PATH}var/mysql:/var/lib/mysql
        - ${APP_PATH}etc/mysql:/etc/mysql
    environment:
        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - TZ=Europe/Paris
rabbitmq:
    image: rabbitmq:3.8.2-management
    container_name: rabbitmq
    volumes:
        - ${APP_PATH}etc/rabbitmq:/etc/rabbitmq/:rw
        - ${APP_PATH}var/rabbitmq:/var/lib/rabbitmq/:rw
        - ${APP_PATH}var/log/rabbitmq:/var/log/rabbitmq/:rw
    environment:
        HOSTNAME: ${RABBITMQ_HOSTNAME}
        RABBITMQ_ERLANG_COOKIE: ${RABBITMQ_ERLANG_COOKIE}
        RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
        RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
    ports:
        - ${RABBITMQ_PORT}:5672
        - ${RABBITMQ_MGT_PORT}:15672
worker:
    image: python:3.6
    container_name: worker
    command: bash -c "pip3 install -r requirements.txt && celery -A ${PROJECT_NAME} worker -l info"
    working_dir: /app
    volumes:
       - ${APP_PATH}var/www/api.mylaser.fr/mylazer_backend:/app
    environment:
        - PYTHONUNBUFFERED=1
        - MYSQL_HOST=mysql
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - CELERY_BROKER=${CELERY_BROKER}
    depends_on:
        - mysql
        - rabbitmq
beat-worker:
    image: python:3.6
    container_name: beat-worker
    command: bash -c "pip3 install -r requirements.txt && celery -A ${PROJECT_NAME} beat -l info"
    working_dir: /app
    volumes:
       - ${APP_PATH}var/www/api.mylaser.fr/mylazer_backend:/app
    environment:
        - PYTHONUNBUFFERED=1
        - MYSQL_HOST=mysql
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - CELERY_BROKER=${CELERY_BROKER}
    depends_on:
        - mysql
        - rabbitmq
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.