我们已经熟悉了 -v
或者 --volume
,官方最近建议( Docker 17.06+ ) 使用 --mount
。
官方文档:https://docs.docker.com/engine/admin/volumes/
修订说明
- 务必弃用
-v
参数,为了方便对比,本文以注释方式提供-v
参数示例。
类型
bind
volume
tmpfs
source
source
或 src
destination
destination
或 dst
或 target
volumes
创建 volume
不创建也可以,使用时若不存在,Docker 会自动新建。
1 | $ docker volume create VOLUME_NAME |
$ docker run
type=volume
,可以省略,默认为该类型。
1 | $ docker run \ |
$ docker service
1 | $ docker service create -d \ |
readonly
将数据卷挂载为只读文件夹。
1 | --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly |
bind mounts
官方文档:https://docs.docker.com/engine/admin/volumes/bind-mounts/
-v
参数挂载的文件或目录路径如果不存在,Docker 会默认创建一个文件夹。
--mount
参数挂载的文件或目录路径如果不存在,Docker 不会自动创建,并且会报错。
type
为 bind
1 | $ docker run \ |
macOS
该选项仅用于 macOS
1 | --mount type=bind,source=$PWD/target,destination=/app,consistency=cached |
consistent
ordefault
: The default setting with full consistency, as described above.delegated
: The container runtime’s view of the mount is authoritative. There may be delays before updates made in a container are visible on the host.cached
: The macOS host’s view of the mount is authoritative. There may be delays before updates made on the host are visible within a container.
These options are completely ignored on all host operating systems except macOS
.
tmpfs
1 | --mount type=tmpfs,destination=/app |
tmpfs
没有宿主机源文件。
注意事项
当挂载一个 空的数据卷
时,若挂载的容器目标目录存在文件时,Docker 会把容器中的文件复制到数据卷中。若 监听主机目录
或 挂载非空数据卷
时,不会复制容器中原有文件,而是由原路径文件直接覆盖容器中的目标路径。下面通过具体的命令来进行说明。
1 | $ docker run -it --rm \ |