내 docker compose 파일에는 web, nginx 및 postgres의 세 가지 컨테이너가 있습니다. Postgres는 다음과 같습니다 :
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
내 목표는 ./database
postgres 컨테이너 내부 에있는 로컬 폴더에 해당하는 볼륨을로 마운트하는 것 /var/lib/postgres
입니다. 이 컨테이너를 시작하고 postgres에 데이터를 삽입 /var/lib/postgres/data/base/
하면 postgres 컨테이너에 추가하는 데이터로 가득 차 있지만 로컬 시스템에서는 폴더 ./database
만 가져 data
옵니다. 즉 ./database/data
비어 있습니다. . 왜?
노트:
업데이트 1
Nick의 제안에 따라 나는 다음 docker inspect
을 발견했다.
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
내가 코딩하지 않은 다른 볼륨에 의해 데이터가 도난당한 것처럼 보입니다. 왜 그런지 잘 모르겠습니다. postgres 이미지가 해당 볼륨을 생성합니까? 그렇다면 다시 시작할 때 마운트 하는 볼륨 대신 해당 볼륨 을 사용 하는 방법이 있습니까? 그렇지 않으면 다른 볼륨을 비활성화하고 내 볼륨을 사용하는 좋은 방법이 ./database
있습니까?
업데이트 2
Nick 덕분에 해결책을 찾았습니다! (및 다른 친구) 아래에 답변하십시오.
from app import db
및 db.create_all()
A로부터 docker run
컨테이너를 시작한 후. 나는 initdb
커맨드 라인에서 직접 하지 않습니다 .
sudo su -
하고 찾는 다른 방법을 모른다 ./database/data
. 내가 말할 수있는 한 아무것도 없습니다.
initdb
데이터베이스 클러스터를 초기화하기 위해 명령 행을 이미 실행하고 있습니까?