簡體   English   中英

Docker 無法識別 .env postgres 變量

[英]Docker does not recognize .env postgres variabls

編輯:Docker 似乎沒有創建我的 postgres 數據庫,即使我在我的.env文件中定義了它們。

我使用了docker-compose config ,看起來 Docker 確認了我的數據:

environment:
    POSTGRES_DB: animemusicsorter
    POSTGRES_PASSWORD: root
    POSTGRES_USER: waifuszn

但是當我運行docker-compose up ,會出現以下錯誤:

postgres    | 2021-07-12 22:39:01.906 UTC [35] FATAL:  password authentication failed for user "waifuszn"
postgres    | 2021-07-12 22:39:01.906 UTC [35] DETAIL:  Role "waifuszn" does not exist.

我曾嘗試刪除卷並刪除postgres並重新創建它們,但這也沒有給我任何結果。

docker-compose.yml

version: '3.5'

services:
  postgres:
    container_name: postgres
    image: postgres:11.6
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
    volumes:
      - ~/srv/docker/template-postgres/data:/var/lib/postgresql/data:rw

  django:
    container_name: django
    build:
      context: .
      dockerfile: ./conf/django/Dockerfile.windows
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - ./back:/app:rw
    depends_on:
      - postgres
    env_file:
      - .env

  react:
    container_name: react
    build:
      context: .
      dockerfile: ./conf/react/Dockerfile
    command: yarn run start:dev
    ports:
      - "4000:4000"
    volumes:
      - ./front/src:/app/src:rw
      - ./front/public:/app/public:rw

檢查您的 Postgres 服務是否通過了環境變量:

version: "3"

services:
    django:
        build: .
        restart: on-failure
        container_name: django
        command: bash -rc "python intento/manage.py makemigrations &&
                           python intento/manage.py migrate &&
                           gunicorn --limit-request-line 8190 --workers=3
                           --chdir /usr/src/app/src wsgi:application --bind 0.0.0.0:8000"
        volumes:
            - .:/usr/src/app
        expose:
            - 8000
        env_file:
            - ./.env
        depends_on:
            - pgdb
    pgdb:
        image: postgres
        restart: on-failure
        container_name: pgdb
        environment:
            POSTGRES_USER: ${DB_USER}
            POSTGRES_PASSWORD: ${DB_PASSWORD}
            POSTGRES_DB: ${DB_NAME}

編輯:剛剛看到你給出的例子,在你的 Postgres 環境屬性中更改 = :

正如您所說, .env文件是為您的.env構建設置環境變量的好習慣。
根據您的問題/問題:

我不確定我是否仍然需要在我的系統上本地創建數據庫,或者 Docker 是否會自動處理它。

如果您還使用 docker-compose 部署 postgres 容器,則不必在本地創建數據庫。 如果是這種情況,我建議您將這兩個容器連接到您選擇的網絡並命名容器,以便 Django 容器可以使用主機名作為postgres .env文件可以有選擇地提供給容器(可能是您粘貼docker-compose.yml -compose 文件時縮進移位),以下docker-compose.yml文件應如下所示

   version: '3.5'

services:
  postgres:
    container_name: postgres
    image: postgres:11.6
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
    volumes:
      - ~/srv/docker/template-postgres/data:/var/lib/postgresql/data:rw
    networks:
      - network_name

 django:
   container_name: django
   build:
     context: .
     dockerfile: ./conf/django/Dockerfile.windows
     command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - ./back:/app:rw
    depends_on:
      - postgres
    env_file:
      - .env
    networks:
      - network_name

networks:
  network_name:
    name: network_name
  

您可能會面臨用戶的權限問題,因此您可能需要調查問題,以指導您為數據庫創建Dockerfile

當您第一次運行docker-compose upPostgres 將使用配置的POSTGRES_*變量初始化數據庫

之后,如果您更改了這些變量之一,您也需要通過psql或執行docker-compose rm postgres; docker-compose up postgres手動將它們重置到數據庫docker-compose rm postgres; docker-compose up postgres docker-compose rm postgres; docker-compose up postgres以使用新變量重新創建數據庫。

警告: docker-compose rm postgres將刪除您當前的數據庫。

此答案建議docker-compose down -v可以擦除您的音量。

暫無
暫無

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

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