[英]Django project with PostgreSQL database in Docker container - directory /var/lib/postgresql/data exists but is not empty
我嘗試在Docker容器中運行Django項目。 到目前為止,一切正常。 我沒有進行任何更改,但是在底部顯示了錯誤。 任何想法有什么問題嗎? 我的PostgreSQL設置是這樣的:
DATABASES = {
"default":
{
'ENGINE': 'django.db.backends.postgresql',
"NAME": 'myproject',
"HOST": "db",
"PORT": "5432",
}
}
DATABASES = {'default': dj_database_url.config(default='postgres://addw...@ec2-31-11-107-127.compute-1.amazonaws.com:5432/qdsfks')}
泊塢窗,compose.yml:
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: myproject
POSTGRES_PASSWORD: somepass
volumes:
- "./local_pgdata:/var/lib/postgresql/data/pgdata"
django:
build: .
command: python3 manage.py runserver 0.0.0.0:8001
volumes:
- .:/code
ports:
- "8001:8001"
depends_on:
- db
日志:
db_1 | The files belonging to this database system will be owned by user "postgres".
db_1 | This user must also own the server process.
db_1 |
db_1 | The database cluster will be initialized with locale "en_US.utf8".
db_1 | The default database encoding has accordingly been set to "UTF8".
db_1 | The default text search configuration will be set to "english".
db_1 |
db_1 | Data page checksums are disabled.
db_1 |
db_1 | initdb: directory "/var/lib/postgresql/data" exists but is not empty
db_1 | If you want to create a new database system, either remove or empty
db_1 | the directory "/var/lib/postgresql/data" or run initdb
db_1 | with an argument other than "/var/lib/postgresql/data".
如果要使用現有主機數據庫,則應僅將主機文件系統映射到Docker容器。 否則,我建議刪除卷映射並使用自定義Dockerfile加載現有內容,如下所述。
./web/proj/settings.py
改進:您還需要在settings.py中設置USER和PASSWORD。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ['POSTGRES_NAME'],
'USER': os.environ['POSTGRES_USER'],
'PASSWORD': os.environ['POSTGRES_PASSWORD'],
'HOST': os.environ['POSTGRES_HOST'],
'PORT': os.environ['POSTGRES_PORT'],
}
}
./docker-compose.yml
db:
restart: always
build:
context: ./db
dockerfile: Dockerfile
env_file: .env
expose:
- "5432"
django:
restart: always
build:
context: ./web
dockerfile: Dockerfile
volumes:
- .:/app
command: bash -c "cd ./web && ./manage.py makemigrations && ./manage.py migrate && ./manage.py runserver"
expose:
- "8000"
env_file: .env
depends_on:
- db
links:
- db
./.env
POSTGRES_NAME=db_name
POSTGRES_USER=db_user
POSTGRES_PASSWORD=password
POSTGRES_HOST=db
POSTGRES_PORT=5432
./db/Dockerfile
FROM postgres
RUN mkdir /app
WORKDIR /app
ADD ./ /app/ # add all sources if you need them
ADD ./path-to-your-csv.csv /app/
RUN [import content here]
在這里,您可以找到一種通過initdb 加載自定義sql代碼的方式: 加載自定義sql腳本 。 您還將找到一種加載csv文件內容的方法。
此外,您應該考慮使用固定裝置,而不是加載csv或sql腳本。 這樣會更容易。
希望這將有助於解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.