我的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
感谢尼克,我找到了解决方案!(和另一个朋友)在下面回答。
from app import db
和db.create_all()
从docker run
开始的容器后。我不是initdb
直接从命令行输入。
sudo su -
并查看./database/data
。据我所知,那里什么也没有。
initdb
命令行来初始化数据库集群了吗?