Почему команда django run "python3 manage.py runserver" не выполняется в docker-compose?
В чем проблема?
У меня есть Dockerfile
, docker-compose.yml
и run.sh
скрипт, который запускает мой django сервер с таким количеством конфигураций, которые работают просто отлично и все проверено, но... сервер не запускается в конце на python3 manage.py runserver 127.0.0.1:80
команде внутри run.sh
bash скрипта.
Я искал везде, но не нашел никакого решения. Если кто-то может подсказать мне, в чем проблема, я буду очень благодарен, потому что я буквально потерял два дня своей жизни в процессе запуска простого сервера django с помощью docker-compose.
Включенные файлы
Это мой docker-compose.yml
файл:
version: "3.9"
services:
backend:
build:
context: .
dockerfile: backend.Dockerfile
restart: always
image: backend:latest
container_name: backend
networks:
- net
dns: backend
volumes:
- /project/backup:/project/backup --name backup
volumes:
backup:
name:
"backup"
networks:
net:
name: net
driver: bridge
А это моя команда Dockerfile
, в которой вам нужно прочитать только последнюю строку CMD
в конце, потому что остальные команды поверх нее работают просто отлично:
# This is the only latest version of alpine that actually works with uwsgi
FROM python:3.8-alpine3.10
# for mysql and postgres
RUN set -ex \
&& apk add --update --no-cache --virtual build-deps \
make \
linux-headers \
pcre-dev \
postgresql-dev \
&& apk add --no-cache \
mariadb-dev \
python3 \
libc-dev \
postgresql-libs
# pillow dependencies
RUN apk add --no-cache --virtual build-pillow \
python3-dev \
musl-dev \
&& apk add \
jpeg-dev \
zlib-dev \
libjpeg \
gcc
# my code
RUN apk add --update --no-cache \
openssh-keygen \
openssh-client \
git \
&& eval $(ssh-agent) \
&& ssh-keygen -t rsa -N "" -f "/root/.ssh/id_rsa" \
&& echo && echo \
&& cat /root/.ssh/id_rsa.pub && echo && echo \
&& echo "you have 60 seconds to activate that ssh-key" \
&& sleep 60 \
&& ssh-add /root/.ssh/id_rsa \
&& echo "StrictHostKeyChecking accept-new" >> /etc/ssh/ssh_config \
&& git clone "My-Super-Private-Git-Repository :)" /project/
WORKDIR /project/
# installing dependencies
RUN python3 -m pip install --upgrade pip \
&& pip3 install wheel \
&& pip3 install -r requirements.txt \
&& apk del \
build-pillow \
build-deps
COPY config.ini config.ini
COPY .env .env
COPY run.sh run.sh
RUN chmod +x run.sh
EXPOSE 1080 80:80 9418
# Here my problem starts
CMD ["./run.sh"]
А это сценарий run.sh
, который запускает миграции, а затем запускает сервер:
#!/bin/bash
cd /project
echo "(requirements)"
pip3 install -r requirements.txt
echo "(makemigrations)"
python3 manage.py makemigrations users anjoman notification
echo "(migrate)"
python3 manage.py migrate
echo "(runserver)"
# Script stops right when reading this command
python3 manage.py runserver 127.0.0.1:80
Logs
Вот журнал, который я веду:
Summary
Как вы видите в последней строке в Logs при попытке выполнить python3 manage.py runserver 127.0.0.1:80
команду внутри run.sh
не выполняется вообще и не дает мне никаких признаков того, что только что произошло внутри.
Все, что мне нужно, это знать, что только что произошло и как я могу это исправить .
Также спасибо, что информируете меня о вещах, которые мне нужно знать.
Возможно, python3 manage.py runserver 127.0.0.1:80
уже запущен, просто журнал не был спущен.
Одним из вариантов может быть добавление PYTHONUNBUFFERED=1
к docker-compose.yaml
, чтобы позволить python не буферизировать вывод:
services:
backend:
environment:
- PYTHONUNBUFFERED=1
build:
context: .
dockerfile: backend.Dockerfile
Или добавьте tty: true
к docker-compose.yaml
, чтобы изменить вывод на линейный буферизованный:
services:
backend:
tty: true
Затем проверьте журнал, чтобы увидеть, может ли какой-либо вывод помочь вам в отладке.