我的坞撰写文件有三个容器,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?
发布于 2017-01-14 14:10:23
奇怪的是,最终的解决方案是改变
volumes:
- ./postgres-data:/var/lib/postgresql至
volumes:
- ./postgres-data:/var/lib/postgresql/data发布于 2017-08-10 06:51:17
可以为所有Postgres数据创建公共的卷
docker volume create pgdata也可以将其设置为撰写文件。
version: "3"
services:
db:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgress
- POSTGRES_DB=postgres
ports:
- "5433:5432"
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- suruse
volumes:
pgdata:它将创建卷名pgdata并将此卷挂载到容器的路径。
你可以检查这个卷
docker volume inspect pgdata// output will be
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/pgdata/_data",
"Name": "pgdata",
"Options": {},
"Scope": "local"
}
]发布于 2017-01-13 18:43:19
我会避免使用相对路径。请记住,docker是一个守护进程/客户端关系。
当您执行撰写时,它本质上只是分解成不同的docker客户端命令,然后将这些命令传递给守护进程。然后,该./database相对于守护进程,而不是客户机。
现在,在这个问题上,码头开发团队有一些反复的经验。,但底线是,它可以有一些意想不到的结果。
简而言之,不要使用相对路径,而是使用绝对路径。
https://stackoverflow.com/questions/41637505
复制相似问题