# 本地目录不存在 srv文件夹。 $ docker run --name=test -v ~/srv:/srv -d volume_test c71cf1cfa4932e3e398a7d6c4e2ae94f915b832f5506e374aedb19af4cb1ac62 # 启动正常,但是进入容器发现目录被清空。 $ docker exec -it test sh /srv # ls /srv #
情况三、宿主机存在文件挂载到容器不存在文件
我们继续,假设宿主机存在文件,容器内不存在该文件:
1 2 3 4 5 6 7 8 9
# 本地目录存在 test.txt文件 $ docker run --name=test -v ~/test.txt:/srv/test.txt-d volume_test 2d6853c10643a735ae3d7f3aaac8c6344f9c75170e531f613d08db7cdf484e54 # 容器内存在 /srv 文件夹,里面原本有一个 index.php 。 $ docker exec -it test sh /srv # ls index.php test.txt /srv # # 可以看到文件挂载成功。
情况四、宿主机存在文件夹挂载到容器不存在文件夹
接下来是宿主机存在文件夹,容器不存在该文件夹,宿主机的 test 文件夹里面存在一个 hello 文件:
1 2 3 4 5 6 7 8 9 10
$ docker run --name=test -v ~/test:/srv/test -d volume_test c935ffa0d9fc5e5ac8f213a51a878e71056472b0597d2e385a29e5c748012958 # 进入容器,查看是否存在 test 文件夹,以及文件夹里面是否有 hello 文件。 $ docker exec -it test sh /srv # ls index.php test /srv # cd test/ /srv/test # ls hello /srv/test #
上面两个例子说明了,容器内部如果不存在文件,宿主机直接挂载。
情况五、宿主机文件夹挂载到容器文件
接下来假设宿主机存在 test 文件夹,而容器内部存在的是名为 test 文件,这样挂载会怎样呢?
1 2 3 4 5
$ docker run --name=test -v ~/test:/srv/test-d volume_test 385bc78e5333460da11f04535da27a3fd226df218f95c970ff2dd5609b17f816 docker: Error response from daemon: oci runtime error: rootfs_linux.go:53: mounting "/var/lib/docker/devicemapper/mnt/fd5c42e844c3550d1a372ed939ed57f90dcacbd375dfed1bedfbb71ef6f3f185/rootfs/etc/hosts" to rootfs "/var/lib/docker/devicemapper/mnt/fd5c42e844c3550d1a372ed939ed57f90dcacbd375dfed1bedfbb71ef6f3f185/rootfs" caused "not a directory".