我的 docker compose 文件有三个容器,web、nginx 和 postgres。 Postgres 看起来像这样:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- 5432:5432
我的目标是在 postgres 容器内挂载一个与名为 ./database
的本地文件夹相对应的卷 /var/lib/postgres
。当我启动这些容器并将数据插入到 postgres 中时,我验证 /var/lib/postgres/data/base/
充满了我正在添加的数据(在 postgres 容器中),但在我的本地系统中, ./database
只得到一个 data
文件夹,即 ./database/data
已创建,但它是空的。为什么?
笔记:
更新 1
根据尼克的建议,我做了一个 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
感谢尼克,我找到了解决方案! (和另一位朋友)在下面回答。
原文由 Alex Lenail 发布,翻译遵循 CC BY-SA 4.0 许可协议
奇怪的是,解决方案最终变成了改变
至