У меня есть следующий docker-compose.yml
файл, который работает без проблем:
version: '2'
services:
nginx:
image: nginx:latest
container_name: nz01
ports:
- "8001:8000"
volumes:
- ./src:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: dz01
depends_on:
- db
volumes:
- ./src:/src
expose:
- "8000"
db:
image: postgres:latest
container_name: pz01
ports:
- "5433:5432"
volumes:
- postgres_database:/var/lib/postgresql/data:Z
volumes:
postgres_database:
external: true
Проблема в том, что я запускаю docker-compose up
Я получаю эту ошибку:
python: can't open file 'manage.py': [Errno 2] No such file or directory
python: can't open file 'manage.py': [Errno 2] No such file or directory
[2018-10-26 12:41:59 +0000] [8] [INFO] Starting gunicorn 19.7.1
[2018-10-26 12:41:59 +0000] [8] [INFO] Listening at: http://0.0.0.0:8000 (8)
[2018-10-26 12:41:59 +0000] [8] [INFO] Using worker: sync
[2018-10-26 12:41:59 +0000] [12] [INFO] Booting worker with pid: 12
[2018-10-26 12:41:59 +0000] [12] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/site-packages/gunicorn/util.py", line 352, in import_app
__import__(module)
ImportError: No module named C.wsgi
[2018-10-26 12:41:59 +0000] [12] [INFO] Worker exiting (pid: 12)
[2018-10-26 12:41:59 +0000] [8] [INFO] Shutting down: Master
[2018-10-26 12:41:59 +0000] [8] [INFO] Reason: Worker failed to boot.
IЯ знаю, что это потому, что в моей папке src
не существует django-проекта C
, но я попытался автоматически создать его в dockerfile
с помощью этого сценария:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /src
RUN mkdir /static
WORKDIR /src
ADD ./src /src
RUN pip install -r requirements.pip
RUN django-admin startproject C
WORKDIR /C
CMD python manage.py collectstatic --no-input;python manage.py migrate; gunicorn C.wsgi -b 0.0.0.0:8000
Сначала я выполняю docker-составьте сборку, и она работает без ошибок:
docker-compose build
db uses an image, skipping
Building web
Step 1/10 : FROM python:2.7
---> 3c43a5d4034a
Step 2/10 : ENV PYTHONUNBUFFERED 1
---> Using cache
---> da201dd581f7
Step 3/10 : RUN mkdir /src
---> Using cache
---> 30938986b6e0
Step 4/10 : RUN mkdir /static
---> Using cache
---> ccc265f2cb16
Step 5/10 : WORKDIR /src
---> Using cache
---> 9886c1215843
Step 6/10 : ADD ./src /src
---> Using cache
---> 4b4861dc6d8d
Step 7/10 : RUN pip install -r requirements.pip
---> Using cache
---> e57283657840
Step 8/10 : RUN django-admin startproject bmat
---> Running in 0b25e38d9edd
Removing intermediate container 0b25e38d9edd
---> 1b39be297aac
Step 9/10 : WORKDIR /bmat
Removing intermediate container 5ed83a067b98
---> 9fd466c2d795
Step 10/10 : CMD python manage.py collectstatic --no-input;python manage.py migrate; gunicorn bmat.wsgi -b 0.0.0.0:8000
---> Running in 3beba0b212f0
Removing intermediate container 3beba0b212f0
---> d83eb0913d98
Successfully built d83eb0913d98
Successfully tagged bmat_web:latest
nginx uses an image, skipping
Затем я запускаю docker-compose up -d
, который возвращает, что все контейнеры работают, но при переходе к kinematic
я обнаружил, что эта проблема упомянута выше, и этопотому что django-admin startproject C
не работает.
Есть опция, позволяющая автоматически запускать его при сборке контейнера Docker?Вероятно, лучший вариант - использовать первую версию dockerfile
, не выполняя ничего для каркаса, собрать все контейнеры, создать проект и затем вручную изменить dockerfile
, чтобы добавить соответствующие функции миграции и collectstatic.
Спасибо