docker卷创建
DB-DATA安装到测试容器中,并添加一些测试数据。db-data
docker volume inspect db-data [ { "CreatedAt": "2025-03-19T15:50:01+03:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/db-data/_data", "Name": "db-data", "Options": null, "Scope": "local" } ]
在此步骤中,我可以将
docker-compose.yml
version: '3'
services:
mongo:
image: mongo:4.4.18
restart: unless-stopped
volumes:
- source: db-data
target: /data/db
type: bind
bind:
create_host_path: false
#- db-data:/data/db # this way just always create new anonymous volume
volumes:
db-data:
external: true
db-data
怎么了?
PS:以前,当Snap使用Docker时,我遇到了这个问题。然后卸下并从发动机安装。但是错误仍然在这里(
PPS:也许LVM可以做到这一点?它似乎您正在将命名卷与绑定安装混合在一起。 您使用:
type: bind
source: db-data
target: /data/db
但是,当您指定docker时,请使用“源”作为文件系统上的主机路径(即,源:db-data→/home/../myrepo/myrepo/db-data)..
由于目录不存在(在主机上) - 您得到:
不存在的源路径:/home/myhomefolder/myrepo/db-data
如果您已经跑了:
type: bind
您有一个名为
docker volume create db-data
的命名卷。要使用该卷
在Docker组成的外部,请勿使用
db-data
Instead做:
type: bind
version: '3.9'
services:
mongo:
image: mongo:4.4.18
restart: unless-stopped
volumes:
- db-data:/data/db
volumes:
db-data:
external: true
告诉Docker撰写使用名为卷DB-data
db-data:/data/db
告诉撰写“不要创建此卷 - 它已经存在。”
因此,它将将现有的命名卷DB-DATA连接到您的容器中的 /数据 /db。如果您希望Docker管理数据存储。
B)或使用绑定安装(将主机目录映射到容器中)如果您希望mongo将其数据存储在主机目录中(例如/home/myhomefolder/myrepo/db-data在您的系统上),则必须在主机上给组合路径。
e.g。:
external: true
确保主机上已经存在目录/主页/myhomefolter/myrepo/db-data。否则,Docker会抱怨它不存在。
(如果您希望Docker自动创建主机路径,则可以设置bind.create_host_path:true在撰写规格中,但请确保您在支持该的Docker版本上。)fyi:
如果你做
version: '3.9'
services:
mongo:
image: mongo:4.4.18
restart: unless-stopped
volumes:
- type: bind
source: /home/myhomefolder/myrepo/db-data
target: /data/db
没有一个卷块引用db-data:使用外部:true,Compose将创建一个新的命名卷,默认情况下使用名称_db-data。如果您没想到,那看起来像是随机的新卷。
如果您指定:
volumes:
- db-data:/data/db
它将确保撰写的卷命名为DB-DATA,您可以使用Docker卷创建自己创建db-data.
名称音量(由本地驾驶员支持)与绑定安装座不同。它们具有不同的用例,必须以不同的作用声明。
大多数时间,如果您想要持久数据,则使用“ docker natum卷”(解决方案a)),因为它可以处理权限,所有权,...
因此,您的最终Docker-Compose.yml可能只是:
volumes:
db-data:
external: true