После учебника: не может запустить контейнер Docker Django - PullRequest
0 голосов
/ 01 ноября 2018

Я следую этому руководству , чтобы создать Django API и запустить его в Docker. API работает хорошо без докера, однако у меня есть проблемы с запуском его в докере.

В руководстве говорится, что Dockerfile должен быть создан:

# Dockerfile

# FROM directive instructing base image to build upon
FROM python:2-onbuild

# COPY startup script into known file location in container
COPY start.sh /start.sh

# EXPOSE port 8000 to allow communication to/from server
EXPOSE 8000

# CMD specifcies the command to execute to start the server running.
CMD ["/start.sh"]
# done!

Затем должен быть построен док-контейнер:

docker build -t davidsale/dockerizing-python-django-app .

До сих пор все в порядке. Но последняя команда терпит неудачу:

docker run -it -p 8000:8000 davidsale/djangoapp1

Ошибка:

Starting Gunicorn.
[2018-11-01 19:24:16 +0000] [1] [INFO] Starting gunicorn 19.6.0
[2018-11-01 19:24:16 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2018-11-01 19:24:16 +0000] [1] [INFO] Using worker: sync
[2018-11-01 19:24:16 +0000] [7] [INFO] Booting worker with pid: 7
[2018-11-01 19:24:16 +0000] [7] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 357, in import_app
    __import__(module)
ModuleNotFoundError: No module named 'helloworld.wsgi'
[2018-11-01 19:24:16 +0000] [7] [INFO] Worker exiting (pid: 7)
[2018-11-01 19:24:16 +0000] [1] [INFO] Shutting down: Master
[2018-11-01 19:24:16 +0000] [1] [INFO] Reason: Worker failed to boot.

Просто упомянуть, что у меня есть следующая организация папок:

helloworld
  - helloworld
       - __init__.py
       - wsgi.py
       - settings.py
       - urls.py
       - views.py
  - dbsqlite3
  - manage.py
Dockerfile
requirements.txt
start.sh

1 Ответ

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

Вам необходимо добавить каталог вашего проекта в ваш образ докера. В учебнике, который вы читаете, произошла ошибка в содержимом dockerfile, и в нем не было переменной WORKDIR:

# Dockerfile

# FROM directive instructing base image to build upon
FROM python:2-onbuild

# COPY startup script into known file location in container
COPY start.sh /start.sh

# Sets workdir
WORKDIR helloworld


# EXPOSE port 8000 to allow communication to/from server
EXPOSE 8000


# CMD specifcies the command to execute to start the server running.
CMD ["/start.sh"]
# done!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...