命名卷将存储在 docker 的文件夹 (/var/lib/docker) 中。如果要在特定主机文件夹中创建卷,请使用具有以下语法的主机卷:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
或者从您的撰写文件中:
version: '2'
services:
mongo:
container_name: "CaseBook-db"
restart: always
image: mongo:3.2.7
ports:
- "27017"
volumes:
- /home/ubuntu/data/db:/data/db
labels:
- "ENVIRONMENT_TYPE=meteor"
app:
container_name: "CaseBook-app"
restart: always
image: "meteor/casebook"
build: .
depends_on:
- mongo
environment:
- MONGO_URL=mongodb://mongo:27017/CaseBook
ports:
- "80:3000"
volumes:
- /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
labels:
- "ENVIRONMENT_TYPE=meteor"
对于主机卷,映像内卷的任何内容都将被主机文件夹的确切内容覆盖,包括主机文件夹的 UID。空主机文件夹不会像空命名卷那样从映像初始化。 UID 映射往往是使用主机卷时最困难的部分。
编辑:从下面的评论中,如果您需要一个充当主机卷的命名卷,那么有一个本地持久卷插件 https://github.com/CWSpear/local-persist列于docker 的插件列表 https://docs.docker.com/engine/extend/legacy_plugins/。安装插件后,您可以创建指向主机文件夹的卷,其功能是即使删除指定卷后,主机目录也会保留。该插件的示例用法包括:
docker volume create -d local-persist -o mountpoint=/data/images --name=images
docker run -d -v images:/path/to/images/on/one/ one
docker run -d -v images:/path/to/images/on/two/ two
它们还包括一个 v2 撰写文件,其中包含以下卷示例:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
我在过去一个月中了解到的另一个选项是使用本地卷驱动程序的安装选项来手动创建绑定安装。这类似于 docker 中的主机卷,但有以下区别:
- 如果该目录不存在,尝试启动具有指向绑定安装的命名卷的容器将会失败。对于主机卷,docker 会将其初始化为 root 拥有的空目录。
- 如果目录为空,命名卷将使用安装位置处映像的内容初始化绑定安装,包括文件和目录所有权/权限。对于主机卷,无需初始化主机目录内容。
要创建命名卷作为绑定安装,您可以使用以下命令提前创建它:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
From a docker run
命令,这可以通过以下方式完成--mount
:
docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
foo
或者在撰写文件中,您可以使用以下命令创建命名卷:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
如果您需要命名卷功能,我的首选是将命名卷与本地驱动程序一起使用,而不是本地持久的第三方驱动程序。