0

docker-compose.yml

version: '3'
services:

    # Django web server
    web:
      volumes:
        - "./app/back:/app"
        - "../front/public/static:/app/static"
        - "./phantomjs-2.1.1:/app/phantomjs"
      build:
        context: .
        dockerfile: dockerfile_django
      #command: python manage.py runserver 0.0.0.0:8080
      #command: ["uwsgi", "--ini", "/app/back/uwsgi.ini"]
      ports:
        - "8080:8080"
      links:
        - async
        - ws_server
        - mysql
        - redis

    async:
      volumes:
        - "./app/async_web:/app"
      build:
        context: .
        dockerfile: dockerfile_async
      ports:
        - "8070:8070"

    # Aiohtp web socket server
    ws_server:
      volumes:
        - "./app/ws_server:/app"
      build:
        context: .
        dockerfile: dockerfile_ws_server
      ports:
        - "8060:8060"

    # MySQL db
    mysql:
      image: mysql/mysql-server:5.7
      volumes:
        - "./db_mysql:/var/lib/mysql"
        - "./my.cnf:/etc/my.cnf"
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: user_b520
        MYSQL_PASSWORD: buzz_17KN
        MYSQL_DATABASE: dev_NT_pr
        MYSQL_PORT: 3306
      ports:
        - "3300:3306"

    # Redis
    redis:
      image: redis:4.0.6
      build:
        context: .
        dockerfile: dockerfile_redis
      volumes:
        - "./redis.conf:/usr/local/etc/redis/redis.conf"
      ports:
        - "6379:6379"

    # Celery worker
    celery:
      build:
        context: .
        dockerfile: dockerfile_celery
      command: celery -A backend worker -l info --concurrency=20
      volumes:
        - "./app/back:/app"
        - "../front/public/static:/app/static"
      links:
        - redis

    # Celery beat
    beat:
      build:
        context: .
        dockerfile: dockerfile_beat
      command: celery -A backend beat
      volumes:
        - "./app/back:/app"
        - "../front/public/static:/app/static"
      links:
        - redis

    # Flower monitoring
    flower:
      build:
        context: .
        dockerfile: dockerfile_flower
      command: celery -A backend flower
      volumes:
        - "./app/back:/app"
        - "../front/public/static:/app/static"
      ports:
        - "5555:5555"
      links:
        - redis

dockerfile_django

FROM python:3.4


RUN mkdir /app
WORKDIR /app
ADD app/back/requirements.txt /app
RUN pip3 install -r requirements.txt

# Apply migrations
CMD ["python", "manage.py", "migrate"]

#CMD python manage.py runserver 0.0.0.0:8080 & cron && tail -f /var/log/cron.log
CMD ["uwsgi", "--ini", "/app/uwsgi.ini"]

In a web container migrations applied and everything is working. I also added CMD ["python", "manage.py", "migrate"] to dockerfile_celery-flower-beat, but they dont applied.

I restart the container using the command:

docker-compose up --force-recreate

How to make the rest of the containers see the migration?

log

flower_1     |   File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 292, in query
flower_1     |     _mysql.connection.query(self, query)
flower_1     | django.db.utils.OperationalError: (1054, "Unknown column 'api_communities.is_closed' in 'field list'")
maximus
  • 95
  • 9
  • Putting two `CMD`s in a docker file won’t work. The second will replace the first. – Alasdair Mar 13 '18 at 09:39
  • @Alasdair but why for django migration were applied, I used two CMD – maximus Mar 13 '18 at 09:41
  • I don’t know, but you can’t use CMD multiple times. – Alasdair Mar 13 '18 at 09:48
  • how then to use several commands? – maximus Mar 13 '18 at 09:50
  • My feeling is that you should run migrate as a separate, deliberate step instead of trying to automate it. There's some discussion of different options [on this question](https://stackoverflow.com/questions/33992867/how-do-you-perform-django-database-migrations-when-using-docker-compose). – Alasdair Mar 13 '18 at 10:16

0 Answers0