django - 通过 docker-compose 在 Docker 容器中启动 Django 的 runserver
问题描述
我想在调用时运行 Django 的runserver命令docker-compose up
这是我尝试过的,首先,我的图像是从根据这个dockerfile自定义的Python 图像开始的:
# Dockerfile
FROM python:3.8
MAINTAINER geoffroy
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Ports exposure
EXPOSE 8000
VOLUME /data
# Install dependancies
RUN apt-get update && apt-get install -y \
vim \
git \
&& rm -rf /var/lib/apt/lists/*
# Setup python dependancies
RUN git clone https://github.com/blondelg/auto.git
WORKDIR /auto
RUN cd /auto
RUN pip install --no-cache-dir -r requirements.txt
# Build the secret key generator
RUN echo "import random" > generate_key.py
RUN echo "print(''.join(random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@$^&*(-_=+)') for i in range(50)))" >> generate_key.py
# Setup environment configuration
RUN cp auto/config_sample.ini auto/config.ini
RUN sed -i "s/SECRET_KEY_PATTERN/$(python generate_key.py)/gI" auto/config.ini
RUN sed -i "s/django.db.backends.sqlite3/django.db.backends.mysql/gI" auto/config.ini
RUN sed -i 's|{BASE_DIR}/db.sqlite3|autodb|gI' auto/config.ini
RUN sed -i "s/USER_PATTERN/root/gI" auto/config.ini
RUN sed -i "s/PASSWORD_PATTERN/root/gI" auto/config.ini
RUN sed -i "s/HOST_PATTERN/database/gI" auto/config.ini
RUN sed -i "s/PORT_PATTERN/3306/gI" auto/config.ini
然后,我的 docker-compose.yml设计如下:
# docker-compose.yml
version: "3"
services:
database:
image: mariadb
container_name: database
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=autodb
hostname: 'database'
runserver:
build: .
command: python /auto/manage.py runserver 0.0.0.0:8000
container_name: runserver
ports:
- "8000:8000"
depends_on:
- database
然后我跑
docker-compose up --build -d
我的两个容器(运行服务器 + 数据库)已启动,但转到http://127.0.0.1:8000会返回错误页面,而我应该有Django 起始页面。
此外,当我进入容器 ( docker exec -ti runserver bash
) 并运行时,我可以通过http://127.0.0.1:8000python manage.py runserver 0.0.0.0:8000
访问Django 起始页。
这里有什么问题?
解决方案
在您的 Dockerfile 中,有这一行WORKDIR /auto
。这意味着您已经在该/auto
文件夹中。所以,在你的 docker-compose 文件中,你应该说
python manage.py runserver 0.0.0.0:8000
而不是/auto/manage.py
.
推荐阅读
- python - 在 Jupyter 中显示的度数符号,但在其他任何地方都没有 - Python
- rx-java2 - 在 Flowable 上的 dispose() 之后调用 Completable 操作
- javascript - Javascript 检查 HTML 是否包含数组中的项目
- jquery - 更改复选框选择时隐藏 div
- python - 如何在 SymPy 中求解具有符号系数和非交换变量的方程?
- python - 使用列表理解避免嵌套循环
- hive - 从日期为“DDMMMYYYY”的表中获取最近 30 天的数据
- iis - Visual Studio 项目的远程服务器上的 IIS 根目录是什么
- c - 16 位唯一键到 8 位数组索引(完美哈希)
- .htaccess - 为什么此 htaccess 重定向报告为临时重定向?