簡體   English   中英

在Docker容器中具有PostgreSQL數據庫的Django項目-目錄/ var / lib / postgresql / data存在但不為空

[英]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.

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