python - 如何使用docker运行django项目

标签 python django docker docker-compose

我正在尝试创建一个 docker 容器来运行我的 django 项目。 遵循不同的其他问题,我成功地使用 docker 获得了成功的构建。

我创建了一个 Dockerfile、docker-compose,并且创建了一个本地 postgres 数据库。 如果我从入口点(makemigration、migrate 和 runserver 链)运行该项目,则可以访问该服务。

问题是当我对项目进行 dockerize 时。

我的 docker-compose.yml 文件是

version: "3.9"

services:
  db:
    restart: always
    image: postgres:12.0-alpine
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=signalcrossingrestapi
      - POSTGRES_USER=$POSTGRES_LOCAL_USER
      - POSTGRES_PASSWORD=$POSTGRES_LOCAL_PASSWORD
    env_file:
      - ./.env
  web:
    restart: always
    build:
      dockerfile: Dockerfile
      context: .
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    env_file: .env
    command: ./run.sh
volumes:
  postgres_data:
    driver: local

这里的run.sh脚本只是

#!/bin/bash
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsu
python3 manage.py runserver

命令createsu位于project/app/managment/commands/

from pathlib import Path

from decouple import AutoConfig
from django.core.management.base import BaseCommand

from accounts.models import CustomUser

BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent
print(BASE_DIR)
config = AutoConfig(search_path=BASE_DIR)
admin = config("ADMIN")
admin_email = config("ADMIN_EMAIL")
admin_password = config("ADMIN_PASSWORD")


class Command(BaseCommand):
    def handle(self, *args, **options):
        if not CustomUser.objects.filter(username=admin).exists():
            CustomUser.objects.create_superuser(admin, admin_email, admin_password)
            self.stdout.write(self.style.SUCCESS("Successfully created superuser"))

dockerfile 是

FROM python:3.8-slim
# set up the psycopg2
RUN apt-get update && apt-get install -y libpq-dev gcc postgresql-client


ENV PYTHONUNBUFFERED=1
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"


WORKDIR /code
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /code/
RUN pip install psycopg2==2.8.3

RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt


RUN apt-get autoremove -y gcc

EXPOSE 8000

当我执行时

docker-compose up --build

它成功了,但是当我打开 localhost:8000 时,我无法访问该页面。

这个问题的解决方案是什么?

最佳答案

manage.py runserver 启动只能从 localhost/127.0.0.1 访问的服务器,您也必须使其可以从其他位置访问。因此,按以下方式编辑 run.sh

python3 manage.py runserver 0.0.0.0:8000

关于python - 如何使用docker运行django项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69290312/

相关文章:

python - Django 3 - 为主键提供默认值时的 Model.save()

django - 重组表单集

docker - 无法启动OpenALPR Docker容器

ubuntu - 没有容器运行时使用端口的 docker-proxy

python - 有关在我的计算机中安装 PCL 的问题

python - 无法运行 python manage.py shell

python - 将 Python Cement 与 asyncio 相结合

docker - 无法访问 rewrite_by_lua_block 中的 ngx.var

python - 为什么 SIP 和 PyQt4 不能相处

python - Pandas 基于更高分辨率的数据重新采样