Почему команда 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

Затем проверьте журнал, чтобы увидеть, может ли какой-либо вывод помочь вам в отладке.

Вернуться на верх