nginx gunicorn с докером: как использовать несколько докер-файлов - PullRequest
0 голосов
/ 22 ноября 2018

Я использую следующий пример для создания веб-сервера django-postgres-nginx-gunicorn.Я хотел бы разделить папки для каждого контейнера.Следующая структура проекта работает правильно.Основной Dockerfile используется для приложения hello (проект django):

svm3_03
|____Dockerfile
|____config
|    |____gunicorn
|    |    |____conf.py
|    |____nginx
|    |    |____conf.d
|    |         |____local.conf
|    |____db
|         |____db_env
|____docker
|    |__db
|       |__Dockerfile
|       |__dataForDB
|__docker-compose.yml
|__hello

docker-compose.yml выглядит так:

version: '3'
...
services:
   djangoapp:
      build:
         context: .
...

, а Dockerfile имеет следующую строку:

CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "hello", "hello.wsgi:application"]

Все работает.Теперь я попытался создать ту же структуру, что и образ БД, и для приложения django, поэтому я переместил основной Dockerfile и каталог hello в папку docker ... Я создал новую папку внутри папки docker с именем djangoapp и переехал тудаDockerfile и привет папка.Новая структура выглядит следующим образом:

svm3_03
|____config
|    |____gunicorn
|    |    |____conf.py
|    |____nginx
|    |    |____conf.d
|    |         |____local.conf
|    |____db
|         |____db_env
|____docker
|    |__db
|    |  |__Dockerfile
|    |  |__dataForDB
|    |__djangoapp
|       |__Dockerfile
|       |__hello
|__docker-compose.yml

Все, что я тогда сделал, это изменил контекстную строку в файле docker-compose.yml следующим образом:

version: '3'
...
services:
   djangoapp:
      build:
         context: ./docker/djangoapp
...

Теперь я получаюследующая ошибка:

djangoapp_1_7b3c77a4b939 | Error: can't chdir to 'hello'...

из-за gunicorn и командной строки CMD внутри Docker-файла djangoapp.Чёткого изменения контекста в docker-compose.yml недостаточно ... есть идеи, что мне не хватает?

Спасибо

ОБНОВЛЕНИЕ: Вот полный файл docker:

FROM python:2

ENV PYTHONUNBUFFERED 1
RUN mkdir -p /opt/services/djangoapp/src

WORKDIR /opt/services/djangoapp/src

COPY . /opt/services/djangoapp/src
RUN pip install --no-cache-dir -r hello/requirements.txt
RUN cd hello && python manage.py collectstatic --no-input

EXPOSE 8000
CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "hello", "hello.wsgi:application"]

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Наконец я смог отследить проблему.Моя ошибка была в Dockerfile приложения django.Команда для запуска gunicorn должна указывать на правильный каталог.Вот правильная команда:

CMD ["gunicorn", "-c", "config/gunicorn/conf.py", "--bind", ":8000", "--chdir", "docker/djangoapp/hello", "hello.wsgi:application"]

Обратите внимание на аргумент опции --chdir.

0 голосов
/ 22 ноября 2018

Я думаю, что проблема не в /hello, а в config/, похоже, что он не был скопирован внутри контейнера.Чтобы проверить, exec -it в контейнер и ls.

Вам нужно передать эту папку внутрь, одним из решений является использование тома:

services: djangoapp: volume: - ./config: / opt / services / djangoapp / src

Другое решение - скопировать его в образ, вам нужно будет изменить контекст сборки, или докер будет жаловаться на копирование файла вне контекста

services:
   djangoapp:
      build:
         context: .
         dockerfile: ./docker/djangoapp/Dockerfile

и измените пути в вашем Dockerfile относительно нового контекста

COPY ./docker/djangoapp /opt/services/djangoapp/src
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...