簡體   English   中英

通過 docker-compose 在 Docker 容器中啟動 Django 的 runserver

[英]Starting Django's runserver in a Docker container through docker-compose

當我調用docker-compose up時,我想讓 Django 的runserver命令運行

這是我嘗試過的,首先,我的圖像是從按照此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

我的兩個容器(runserver + 數據庫)已啟動,但轉到http://127.0.0.1:8000 會返回錯誤頁面,而我應該擁有Django 起始頁面

此外,當我進入容器( docker exec -ti runserver bash )並運行python manage.py runserver 0.0.0.0:8000 ,我可以通過http://127.0.0.1:8000訪問Django 起始頁

這里可能有什么問題?

在您的 Dockerfile 中,有這一行WORKDIR /auto 這意味着您已經在/auto文件夾中。 所以,在你的 docker-compose 文件中,你應該說

python manage.py runserver 0.0.0.0:8000 

而不是/auto/manage.py

按照這個文檔https://docs.docker.com/compose/django/ ,我修復了我在docker-compose.yaml 中聲明音量的方式

        volumes:
            - .:/auto

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM