[英]What is the best way to volume existing database to the container?
需要通過 docker 容器運行項目。 我需要將現有數據庫掛載到 postgres 容器。 在我的 docker-compose.yml 中有下一個
services:
web:
build: .
env_file: .env
command: bash -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
ports:
- "8000:8000"
depends_on:
- redis
- postgres
restart: always
volumes:
- static:/static
expose:
- 8000
environment:
- .env
links:
- postgres
- redis
redis:
image: "redis:alpine"
postgres:
image: "postgres:10"
env_file:
- .env
volumes:
- POSTGRES_DATA:/var/lib/postgresql/data
ports:
- "5433:5432"
expose:
- 5433
volumes:
POSTGRES_DATA:
static:
來自 my.env 文件
POSTGRES_NAME=dbname
POSTGRES_USER=dbuser
POSTGRES_PASSWORD=dbpassword
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATA=/var/lib/postgresql/10/main
但是在我的 web 容器中,我有下一個日志
File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATAL: database "dbname" does not exist
這意味着數據庫掛載失敗。 但我真的找不到它發生的原因。
我不確定,但你可以試試這個命令: docker-compose down -v
刪除卷和容器
來自文檔:
警告:/docker-entrypoint-initdb.d 中的腳本僅在您使用空數據目錄啟動容器時運行; 任何預先存在的數據庫都將在容器啟動時保持不變。 一個常見問題是,如果您的 /docker-entrypoint-initdb.d 腳本之一失敗(這將導致入口點腳本退出)並且您的協調器使用已初始化的數據目錄重新啟動容器,它將不會繼續使用您的腳本
所以你需要提供數據:
volumes:
- /path/where/my/data/are:/var/lib/postgresql/data
我可以在您的撰寫中看到您使用卷POSTGRES_DATA
,我認為這是一個名為 Volume 的新空
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.