Django и uWSGI в контейнере Docker

Я пытаюсь запустить проект, который использует Django и uWSGI в контейнере Docker. Но я новичок в Docker и uWSGI, поэтому я не совсем уверен, как я должен это делать.

Сначала я построил проект с помощью этой команды:

docker build -t saleor .

Затем я запустил его:

docker run --env SECRET_KEY="<the key>" -p 4000:80 saleor

И вот что я получаю:

[uWSGI] getting INI configuration from /app/saleor/wsgi/uwsgi.ini
[uwsgi-static] added mapping for /static => /app/static
*** Starting uWSGI 2.0.15 (64bit) on [Tue Dec 19 14:02:19 2017] ***
compiled with version: 4.9.2 on 19 December 2017 09:11:22
os: Linux-4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017
nodename: 88adfd3f2e93
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /app
detected binary path: /usr/local/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...547 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.5.4 (default, Dec 12 2017, 16:43:39)  [GCC 4.9.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x12277b0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145536 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x12277b0 pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1)
spawned uWSGI worker 1 (pid: 10, cores: 1)

Теперь я не знаю, что я должен делать. Обычно с приложениями Django я просто проверял localhost:4000 в своем браузере. Но это не работает в этом случае, и я ничего не получаю. Так что мне делать?

0
задан 19 December 2017 в 23:06

3 ответа

Я только что кое-что понял. «Docker run» запускает только один контейнер. Но некоторые проекты используют несколько контейнеров для разных сервисов (таких как этот), и для них следует использовать docker-compose. Проблема заключалась в том, что база данных была просто в другом контейнере. Таким образом, использование «docker-compose up» решило проблему.

Хотя сейчас у меня есть другая проблема, которая, кажется, нуждается в поиске в базе данных. Кто-нибудь знает, как я могу войти в базу данных внутри контейнера?

1
ответ дан 19 December 2017 в 23:06

Я не привык к докеру. Знаете ли вы, откуда вы берете источник?

https://github.com/mirumee/saleor-demo

Например, здесь я могу видеть в Dockerfile

EXPOSE 8000
ENV PORT 8000

А в Django сервер тоже указывает на 8000 (см. docker-compose.yml )

Я бы попробовал:

docker run --env SECRET_KEY="<the key>" -p 4000:8000 saleor

и прослушивание порта 4000

curl http://localhost:4000

Порт 5432 выглядит как порт postgres

0
ответ дан 19 December 2017 в 23:06

Когда вы запускаете команду

docker build -t saleor .

Это означает, что вы строите с помощью Dockerfile , в то время как есть добавленные пользователь и группа в процессе.

RUN groupadd -r saleor && useradd -r -g saleor saleor

, а также каталог принадлежит этому пользователю / группе: saleor / saleor

RUN mkdir -p /app/media /app/static  && chown -R saleor:saleor /app/

Вам необходимо добавить : --user saleor:saleor в docker run , поэтому uWSGI не будет работать от имени root

docker run --env SECRET_KEY="<the key>" -p 4000:8000 --user saleor:saleor saleor

Локальный хост : 4000 должны работать нормально. Вот вывод:

[uWSGI] getting INI configuration from /app/saleor/wsgi/uwsgi.ini
[uwsgi-static] added mapping for /static => /app/static
*** Starting uWSGI 2.0.17.1 (64bit) on [Tue Mar 12 15:10:03 2019] ***
compiled with version: 6.3.0 20170516 on 08 February 2019 17:14:12
os: Linux-4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019
nodename: xxxxxx
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /app
detected binary path: /usr/local/bin/uwsgi
your processes number limit is 524288
your memory page size is 4096 bytes
detected max file descriptor number: 524288
building mime-types dictionary from file /etc/mime.types...554 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :4000 fd 3
Python version: 3.6.8 (default, Feb  6 2019, 03:44:09)  [GCC 6.3.0 20170516]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x5XX
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 364600 bytes (356 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x5XX pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1)
spawned uWSGI worker 1 (pid: 9, cores: 1)
spawned uWSGI worker 2 (pid: 10, cores: 1)
spawned uWSGI worker 3 (pid: 11, cores: 1)
spawned uWSGI worker 4 (pid: 12, cores: 1)
0
ответ дан 19 December 2017 в 23:06

Другие вопросы по тегам:

Похожие вопросы: