Как я могу использовать docker-compose, чтобы в этом примере 2 контейнера правильно использовали файл .sock? - PullRequest
3 голосов
/ 08 июня 2019

Я работаю над своим экземпляром AWS EC2, и теперь докерминирую мое приложение, чтобы подготовить его к работе. У меня есть API-интерфейс Django для интерфейса и интерфейса React. Цель состоит в том, чтобы использовать gunicorn для бэкэнда, чтобы служить API и Nginx, чтобы обслуживать реактивные статические файлы. У меня есть 2 файла докера, один для внутреннего интерфейса и один для внешнего интерфейса. Бэкэнд работает с gunicorn в докере, а также работает с docker-compose.

Я боролся с внешним интерфейсом. Сам докер будет работать с npm start (не с nginx), однако отказывается работать с docker-compose, посоветуйте, пожалуйста, на основании приведенного ниже кода, что мне нужно исправить? (поскольку я также писал этот пост, я обнаружил, что сборщик док-станции для внешнего интерфейса не запускается)

После этого я попытаюсь снова заставить его работать с nginx, поэтому не буду использовать npm start в prod.

Кроме того, я хотел бы знать, как я могу поделиться файлом .sock, созданным gunicorn, чтобы его можно было использовать nginx в двух отдельных докерах. Если это неправильный способ соединения моего внешнего интерфейса и внутреннего интерфейса, пожалуйста, посоветуйте лучший подход, так как он будет высоко оценен.

Я пробовал: - множество дополнений и изменений в составе докера, в том числе добавление метода depen_on к серверу внешнего интерфейса в зависимости от бэкэнда. - сочетание разных решений, имеющих одинаковую сеть и объемы, и, думаю, что это все равно не помогло.

вывод на клемму:

(project) ubuntu@XXXXXXXXXXX:~/django-react-app$ docker-compose up
Starting django-react-app_frontend_1 ... done
Starting django-react-app_backend_1  ... done
Attaching to django-react-app_frontend_1, django-react-app_backend_1
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Starting gunicorn 19.9.0
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Listening at: http://0.0.0.                               0:8000 (1)
backend_1   | [2019-06-08 16:04:51 +0000] [1] [INFO] Using worker: sync
backend_1   | [2019-06-08 16:04:51 +0000] [8] [INFO] Booting worker with pid: 8
backend_1   | /usr/local/lib/python3.7/site-packages/psycopg2/__init__.py:144: U                               serWarning: The psycopg2 wheel package will be renamed from release 2.8; in orde                               r to keep installing from binary please use "pip install psycopg2-binary" instea                               d. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-f                               rom-pypi>.
backend_1   |   """)

docker-compose.yml file

version: "3"
services:

  frontend:
    build:
      context: .
      dockerfile: frontend_docker
    ports:
      - "3000:3000"
    volumes:
      - codevolume:/code
    networks:
      - backend

  backend:
    build:
      context: .
      dockerfile: backend_docker
    ports:
      - "8000:8000"
    volumes:
      - codevolume:/code
    networks:
      - backend

volumes:
  codevolume: 
# Networks to be created to facilitate communication between containers
networks:
  backend: 

frontend_dockerfile

FROM node:11.15

USER root

SHELL ["/bin/bash", "-c"]

RUN apt-get update -y && \
 apt-get install -y nginx && \
 apt-get clean && \
 mkdir /code/ && \
 rm -rf /tmp/*

WORKDIR /code

COPY source/frontend/ /code/

RUN npm install && \
 npm cache clear --force && \
 rm -rf /tmp/*

RUN npm run-script build && \
 rm -rf /tmp/*

#will only be using one of these with nginx and removing the other once i resolve this stackoverflow issue :)
EXPOSE 8000
EXPOSE 3000

COPY configs/nginx.conf /tmp/

RUN mv /tmp/nginx.conf /etc/nginx/sites-available/myreactfrontend && \
 ln -s /etc/nginx/sites-available/myreactfrontend /etc/nginx/sites-enabled

#will ideally be switching to nginx afterward, may even look into multi stage builds if people think this would be recommended
#ENTRYPOINT ["/bin/bash", "-c", "nginx -g 'daemon off;'"]
ENTRYPOINT ["/bin/bash", "-c", "npm start"]

Ниже файл работает нормально, поэтому не нужно редактировать, я предоставляю файл, чтобы он имел смысл в контексте.

backend_docker

FROM python:3

USER root

SHELL ["/bin/bash", "-c"]

RUN mkdir /code

WORKDIR /code

COPY requirements/base.txt /code/

COPY source/backend/ /code/

ENV PYTHONUNBUFFERED 1

ENV DJANGO_SETTINGS_MODULE=mydjangoapi.settings.base

RUN pip install -r base.txt && \
 python manage.py makemigrations && \
 python manage.py migrate

EXPOSE 8000

ENTRYPOINT ["/bin/bash", "-c", "gunicorn --bind 0.0.0.0:8000 mydjangoapi.wsgi"] 

1 Ответ

1 голос
/ 08 июня 2019

Короче говоря, исправление для этого работало docker-compose build из-за того, что OP строит контейнеры с помощью dockerfile внутри файла docker-compose.yml, а не просто «включает изображения» с помощью docker-compose.

...