我正在尝试创建一个 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/