为什么Django运行命令 "python3 manage.py runserver" 在docker-compose中无法执行?

28 浏览
0 Comments

为什么Django运行命令 "python3 manage.py runserver" 在docker-compose中无法执行?

问题是什么?

我有一个 Dockerfiledocker-compose.yml 和一个 run.sh 脚本,用许多配置来运行我的 django 服务器,一切都测试好了,但是最终服务器无法在 run.sh bash 脚本中的 python3 manage.py runserver 127.0.0.1:80 命令下运行。

我到处搜索了,但仍然找不到任何解决方案。如果有人能指导我找到问题所在,我将不胜感激,因为我在使用 docker-compose 运行一个简单的 django 服务器的过程中已经浪费了两天时间。

包含的文件

这是我的 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

日志

这是我正在记录的日志:

backend | (requirements)
backend | Requirement already satisfied: setuptools>=54.1.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 5)) (57.4.0)
backend | Requirement already satisfied: uwsgi>=2.0.19.1 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 6)) (2.0.19.1)
backend | Requirement already satisfied: django>=3.1.7 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 7)) (3.2.7)
backend | Requirement already satisfied: djangorestframework>=3.12.2 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 8)) (3.12.4)
backend | Requirement already satisfied: beautifulsoup4>=4.9.3 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 9)) (4.9.3)
backend | Requirement already satisfied: requests>=2.25.1 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 10)) (2.26.0)
backend | Requirement already satisfied: mysqlclient>=2.0.3 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 11)) (2.0.3)
backend | Requirement already satisfied: drf-yasg2>=1.19.4 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 12)) (1.19.4)
backend | Requirement already satisfied: django-filter>=2.4.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 13)) (2.4.0)
backend | Requirement already satisfied: Pillow>=8.1.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 14)) (8.3.1)
backend | Requirement already satisfied: django-phonenumber-field[phonenumbers]>=5.0.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 15)) (5.2.0)
backend | Requirement already satisfied: python-decouple>=3.4 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 16)) (3.4)
backend | Requirement already satisfied: django-cors-headers>=3.7.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 17)) (3.8.0)
backend | Requirement already satisfied: faker>=8.1.3 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 18)) (8.12.1)
backend | Requirement already satisfied: pyrogram==0.18.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 19)) (0.18.0)
backend | Requirement already satisfied: tgcrypto>=1.2.2 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 20)) (1.2.2)
backend | Requirement already satisfied: django-dbbackup>=3.3.0 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 21)) (3.3.0)
backend | Requirement already satisfied: django-sslserver>=0.22 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 22)) (0.22)
backend | Requirement already satisfied: psycopg2>=2.9.1 in /usr/local/lib/python3.8/site-packages (from -r requirements.txt (line 23)) (2.9.1)
backend | Requirement already satisfied: pyaes==1.6.1 in /usr/local/lib/python3.8/site-packages (from pyrogram==0.18.0->-r requirements.txt (line 19)) (1.6.1)
backend | Requirement already satisfied: pysocks==1.7.1 in /usr/local/lib/python3.8/site-packages (from pyrogram==0.18.0->-r requirements.txt (line 19)) (1.7.1)
backend | Requirement already satisfied: sqlparse>=0.2.2 in /usr/local/lib/python3.8/site-packages (from django>=3.1.7->-r requirements.txt (line 7)) (0.4.1)
backend | Requirement already satisfied: asgiref<4,>=3.3.2 in /usr/local/lib/python3.8/site-packages (from django>=3.1.7->-r requirements.txt (line 7)) (3.4.1)
backend | Requirement already satisfied: pytz in /usr/local/lib/python3.8/site-packages (from django>=3.1.7->-r requirements.txt (line 7)) (2021.1)
backend | Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.8/site-packages (from beautifulsoup4>=4.9.3->-r requirements.txt (line 9)) (2.2.1)
backend | Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.8/site-packages (from requests>=2.25.1->-r requirements.txt (line 10)) (2.0.4)
backend | Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/site-packages (from requests>=2.25.1->-r requirements.txt (line 10)) (1.26.6)
backend | Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/site-packages (from requests>=2.25.1->-r requirements.txt (line 10)) (2021.5.30)
backend | Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/site-packages (from requests>=2.25.1->-r requirements.txt (line 10)) (3.2)
backend | Requirement already satisfied: coreapi>=2.3.3 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (2.3.3)
backend | Requirement already satisfied: uritemplate>=3.0.1 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (3.0.1)
backend | Requirement already satisfied: inflection>=0.3.1 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (0.5.1)
backend | Requirement already satisfied: six>=1.15.0 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (1.16.0)
backend | Requirement already satisfied: packaging>=18.0 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (21.0)
backend | Requirement already satisfied: ruamel.yaml>=0.16.12 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (0.17.16)
backend | Requirement already satisfied: coreschema>=0.0.4 in /usr/local/lib/python3.8/site-packages (from drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (0.0.4)
backend | Requirement already satisfied: phonenumbers>=7.0.2 in /usr/local/lib/python3.8/site-packages (from django-phonenumber-field[phonenumbers]>=5.0.0->-r requirements.txt (line 15)) (8.12.31)
backend | Requirement already satisfied: python-dateutil>=2.4 in /usr/local/lib/python3.8/site-packages (from faker>=8.1.3->-r requirements.txt (line 18)) (2.8.2)
backend | Requirement already satisfied: text-unidecode==1.3 in /usr/local/lib/python3.8/site-packages (from faker>=8.1.3->-r requirements.txt (line 18)) (1.3)
backend | Requirement already satisfied: itypes in /usr/local/lib/python3.8/site-packages (from coreapi>=2.3.3->drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (1.2.0)
backend | Requirement already satisfied: jinja2 in /usr/local/lib/python3.8/site-packages (from coreschema>=0.0.4->drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (3.0.1)
backend | Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.8/site-packages (from packaging>=18.0->drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (2.4.7)
backend | Requirement already satisfied: ruamel.yaml.clib>=0.1.2 in /usr/local/lib/python3.8/site-packages (from ruamel.yaml>=0.16.12->drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (0.2.6)
backend | Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/site-packages (from jinja2->coreschema>=0.0.4->drf-yasg2>=1.19.4->-r requirements.txt (line 12)) (2.0.1)
backend | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
backend | (makemigrations)
backend | Migrations for 'anjoman':
backend |   anjoman/migrations/0001_initial.py
backend |     - Create model Anjoman
backend |     - Create model Event
backend |     - Create model Job
backend |     - Create model Major
backend |     - Create model Skill
backend |     - Create model University
backend |     - Create model Telegram
backend |     - Create model Project
backend |     - Create model Member
backend |   anjoman/migrations/0002_initial.py
backend |     - Add field user to member
backend |     - Add field anjoman to job
backend |     - Add field anjoman to event
backend |     - Add field university to anjoman
backend | Migrations for 'notification':
backend |   notification/migrations/0001_initial.py
backend |     - Create model Answer
backend |     - Create model Info
backend |     - Create model Notification
backend |     - Create model Request
backend |   notification/migrations/0002_initial.py
backend |     - Add field fr to request
backend |     - Add field notification to request
backend |     - Add field to to request
backend |     - Add field info to notification
backend |     - Add field user to notification
backend |     - Add field request to answer
backend | Migrations for 'users':
backend |   users/migrations/0001_initial.py
backend |     - Create model User
backend | (migrate)
backend | Operations to perform:
backend |   Apply all migrations: admin, anjoman, auth, authtoken, contenttypes, notification, sessions, users
backend | Running migrations:
backend |   No migrations to apply.
backend | (runserver)

总结

正如您在日志最后一行所看到的,当尝试执行 python3 manage.py runserver 127.0.0.1:80 命令时,run.sh 内部的命令根本没有运行,也没有给我任何关于它发生了什么的迹象。

我需要的只是知道刚刚发生了什么,以及如何修复它

同时感谢您对需要知道的事情进行提醒。

admin 更改状态以发布 2023年5月21日
0
0 Comments

可能已经运行了python3 manage.py runserver 127.0.0.1:80,只是日志没有被刷新。

一种选项是在docker-compose.yaml中添加PYTHONUNBUFFERED=1以让python不缓存输出:

services:
  backend:
    environment:
      - PYTHONUNBUFFERED=1
    build:
      context: .
      dockerfile: backend.Dockerfile

或者在docker-compose.yaml中添加tty: true以将输出更改为按行缓冲:

services:
  backend:
    tty: true

然后,检查日志以查看是否有任何输出可以帮助您进行调试。

0