我的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创建,但它为空。为什么?
./database
/var/lib/postgres
/var/lib/postgres/data/base/
data
./database/data
笔记:
根据Nick的建议,我做了一个docker inspect发现:
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?
感谢尼克,我找到了解决方案!(和另一个朋友)在下面回答。
奇怪的是,解决方案最终不得不改变
volumes: - ./postgres-data:/var/lib/postgresql
至
volumes: - ./postgres-data:/var/lib/postgresql/data