【发布时间】:2021-02-21 03:50:53
【问题描述】:
我有一个 Django 应用程序,我使用 GitHub Actions 部署到 Azure Kubernetes 集群,
当我使用 docker-compose up 在本地运行应用程序时,出现以下错误屏幕;
追溯日志
Environment:
Request Method: GET
Request URL: http://0.0.0.0:8000/
Django Version: 3.1
Python Version: 3.8.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'djoser',
'oauth2_provider',
'social_django',
'drf_yasg',
'core']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/local/lib/python3.8/site-packages/django/utils/deprecation.py", line 113, in __call__
response = self.process_request(request)
File "/usr/local/lib/python3.8/site-packages/django/middleware/common.py", line 48, in process_request
host = request.get_host()
File "/usr/local/lib/python3.8/site-packages/django/http/request.py", line 137, in get_host
raise DisallowedHost(msg)
Exception Type: DisallowedHost at /
Exception Value: Invalid HTTP_HOST header: '0.0.0.0:8000'. You may need to add '0.0.0.0' to ALLOWED_HOSTS.
当然,通过隐藏敏感变量,我不确定在哪里提供这些环境变量。
.dev.env 中的变量
DEBUG="True"
SECRET_KEY="...86hoe@14y6)en"
ALLOWED_HOSTS="localhost,127.0.0.1 [::1]"
DATABASE_HOST="postgres"
DATABASE_USER="postgres"
DATABASE_NAME="postgres"
DATABASE_PASSWORD="postgres"
以下是我的 Dockerfile 和 docker-compose 文件;
docker-compose
---
version: "3.7"
services:
postgres:
environment:
POSTGRES_HOST_AUTH_METHOD: trust
image: "postgres:12"
networks:
- internal
web:
build: "."
container_name: identityservice
depends_on:
- postgres
environment:
- DEBUG=1
- "SECRET_KEY=\"#e...20m7rxh*%)ki(*=\""
ports:
- 8000:8000
networks:
- internal
stdin_open: true
tty: true
volumes:
- "./src/:/app/"
networks:
internal:
Dockerfile
FROM python:3.8-slim
# Set working directory
RUN mkdir /app
WORKDIR /app
# Set environment variables
# Prevents Python from writing pyc files to disc (equivalent to python -B option)
ENV PYTHONDONTWRITEBYTECODE 1
# Prevents Python from buffering stdout and stderr (equivalent to python -u option)
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get install -y curl
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
RUN pip install django-environ
COPY ./src .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
对不起,如果这是非常直接或基本的。感谢您的帮助,谢谢
【问题讨论】:
-
你绑过 pipenv 外壳吗?还是只包含所有变量的 env.py 文件?
-
感谢您的回复。我没有尝试过 pipenv 或 env.py,我不确定在我的工作流程中的何处以及如何实现它。你能详细说明一下吗?
标签: python django docker-compose environment-variables dockerfile