Настройка докера для django, vue.js, rabbitmq - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь добавить поддержку Docker в свой проект. Моя структура выглядит так:

передний / Dockerfile

назад / Dockerfile

докер-compose.yml

Мой Dockerfile для django:

FROM ubuntu:18.04

RUN apt-get update && apt-get install -y python-software-properties software-properties-common
RUN add-apt-repository ppa:ubuntugis/ubuntugis-unstable

RUN apt-get update && apt-get install -y python3 python3-pip binutils libproj-dev gdal-bin python3-gdal

ENV APPDIR=/code
WORKDIR $APPDIR

ADD ./back/requirements.txt /tmp/requirements.txt
RUN ./back/pip3 install -r /tmp/requirements.txt
RUN ./back/rm -f /tmp/requirements.txt

CMD $APPDIR/run-django.sh

Мой Dockerfile для Vue.js:

FROM node:9.11.1-alpine

# install simple http server for serving static content
RUN npm install -g http-server

# make the 'app' folder the current working directory
WORKDIR /app

# copy both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./

# install project dependencies
RUN npm install

# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . .

# build app for production with minification
RUN npm run build

EXPOSE 8080
CMD [ "http-server", "dist" ]

и мой docker-compose.yml:

version: '2'

services:

  rabbitmq:
    image: rabbitmq

  api:
    build:
      context: ./back
    environment:
      - DJANGO_SECRET_KEY=${SECRET_KEY}
    volumes:
      - ./back:/app

  rabbit1:
    image: "rabbitmq:3-management"
    hostname: "rabbit1"
    ports:
      - "15672:15672"
      - "5672:5672"
    labels:
      NAME: "rabbitmq1"
    volumes:
      - "./enabled_plugins:/etc/rabbitmq/enabled_plugins"

  django:
    extends:
      service: api
    command:
      ./back/manage.py runserver
      ./back/uwsgi --http :8081 --gevent 100 --module websocket --gevent-monkey-patch --master --processes 4

    ports:
      - "8000:8000"
    volumes:
      - ./backend:/app

  vue:
    build:
      context: ./front
    environment:
      - HOST=localhost
      - PORT=8080
    command:
      bash -c "npm install && npm run dev"
    volumes:
      - ./front:/app
    ports:
      - "8080:8080"
    depends_on:
      - django

Сбой при запуске docker-compose:

ERROR: for chatapp2_django_1  Cannot start service django: b'OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \\"./back/manage.py\\": stat ./back/manage.py: no such file or directory": unknown'

ERROR: for rabbit1  Cannot start service rabbit1: b'driver failed programming external connectivity on endpoint chatapp2_rabbit1_1 (05ff4e8c0bc7f24216f2fc960284ab8471b47a48351731df3697c6d041bbbe2f): Error starting userland proxy: listen tcp 0.0.0.0:15672: bind: address already in use'

ERROR: for django  Cannot start service django: b'OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \\"./back/manage.py\\": stat ./back/manage.py: no such file or directory": unknown'
ERROR: Encountered errors while bringing up the project.

Я не понимаю, что это за «неизвестный» каталог, который он пытается получить. Я настроил все это правильно для структуры моего проекта?

1 Ответ

0 голосов
/ 09 января 2019

Для части django вам не хватает копии вашего кода для приложения django, которое, как я предполагаю, находится в back. Вам нужно будет добавить ADD /back /code. Возможно, вы также захотите запустить сборку Python Alpine Docker вместо Ubuntu, так как это значительно сократит время сборки и размер контейнера.

Вот что я бы сделал:

# change this to whatever python version your app is targeting (mine is typically 3.6)
FROM python:3.6-alpine

ADD /back /code

# whatever other dependencies you'll need i run with the psycopg2-binary build so i need these (the nice part of the python-alpine image is you don't need to install any of those python specific packages you were installing before
RUN apk add --virtual .build-deps gcc musl-dev postgresql-dev

RUN pip install -r /code/requirements.txt

# expose whatever port you need for your Django app (default is 8000, we use non-default but you can do whatever you need)
EXPOSE 8000

WORKDIR /code

#dont need /code here since WORKDIR is effectively a change directory

RUN chmod +x /run-django.sh
RUN apk add --no-cache bash postgresql-libs

CMD ["/run-django.sh"]

У нас есть похожий run-django.sh скрипт, который мы называем python manage.py makemigrations и python manage.py migrate. Я полагаю, что у вас похожи.

Короче говоря, вы не копировали код из back в code.

Также в вашем docker-compose у вас нет контекста сборки, как у службы vue.

Что касается сбоя контейнера rabbitmq, вам необходимо остановить на компьютере службу /etc, связанную с rabbitm. Я получаю эту ошибку, если я пытаюсь открыть контейнер postgresql или контейнер redis и мне нужно /etc/init.d/postgresql stop или /etc/init.d/redis stop, чтобы остановить службу, запущенную на вашем компьютере, чтобы не допустить коллизий на этом порте по умолчанию для этой службы .

...