[英]DJANGO with docker and postgresql
我是 docker 的新手,正在玩 docker 以了解更多信息。
这是我的Dockerfile
FROM python:3.8.3-alpine
#set the working directory for the container
WORKDIR /user/src/app/
#set the env variables
ENV PYTHONBUFFERED=1
ENV PYTHONWRITEBYCODE=1
# install psycopg2 dependencies
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
RUN pip install psycopg2-binary
RUN apk add zlib-dev jpeg-dev gcc musl-dev
#install pip for the docker image
RUN pip install --upgrade pip
#copy the requirement from local system to docker image inside /user/src/app/
COPY ./requirements.txt .
RUN pip install -r requirements.txt
#copy the complete project files after installing dependencies.
COPY . .
ENTRYPOINT ["/user/src/app/entrypoint.sh"]
第二个是entrypoint.sh
#!/bin/sh
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $DB_HOST $DB_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
# python manage.py flush --no-input
# python manage.py migrate
exec "$@"
最后一个docker-compose.yml
version: "3.8"
services:
db:
image: postgres:12.4-alpine
environment:
- POSTGRES_DB=demo_1
- POSTGRES_USER=***
- POSTGRES_PASSWORD=***
volumes:
- postgres_data:/var/lib/postgresql/data/
web:
build:
context: .
dockerfile: Dockerfile
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/user/src/app/
ports:
- "8000:8000"
depends_on:
- db
env_file:
- ./.env
volumes:
postgres_data:
我能够运行 Postgres 并使用 docker 中的这些文件在端口 8000 中构建服务器。
现在,尽管添加了 Postgres,我们仍然可以为 Django 创建一个独立的 Docker 镜像,只要 .env 文件中的 DATABASE 环境变量没有设置为 Postgres。
这怎么可能?
我尝试了以下代码
$ docker run -d \
-p 8006:8000 \
-e "SECRET_KEY=please_change_me" -e "DEBUG=1" -e "DJANGO_ALLOWED_HOSTS=*" \
hello_django python /usr/src/app/manage.py runserver 0.0.0.0:8000
但是我无法在http:localhost:8006
运行服务器
需要在 .env 文件或其他文件中整体完成哪些更改?
另外我的.env file
SECRET_KEY = *********
DB_NAME = demo_1
DEBUG = 1
DB_USER = *****
DB_PASSWORD = ***********
DB_HOST = db
DB_PORT = 5432
ALLOWED_HOSTS=.localhost, .amazonaws.com
DATABASE = postgres
settings.py
文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': config('DB_PORT', cast=int)
}
}
我需要删除entrypoint.sh
文件吗? 或者删除DATABASE=postgres
以在 localhost:8006 除了端口 8000 之外运行不同的服务器实例
这可能不是唯一的问题,但请注意我如何将ENGINE
值更改为'django.db.backends.postgresql_psycopg2'
,因为您使用的是psycopg2
。 我不记得这个的确切原因,但这与您使用的是python-alpine
图像有关, python-alpine
我遇到了类似的问题。
在这里,我使用'db'
作为数据库HOST
,因为这是我docker-compose.yml
文件中的服务名称,但您这样做的方式也应该有效。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': 'db',
'PORT': 5432,
'NAME': os.environ.get('POSTGRES_DB'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD')
}
}
另外,我并没有真正理解您的问题,但这是我看到的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.