[英]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 up
, Postgres 將使用配置的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.