以docker hub的centos:8为研究对象
1、宿主机和容器映射目录都不存在
宿主机和容器映射目录都会自动创建,且在一边操作等同于在另一边操作。
2、宿主机目录不存在,容器映射目录为空。容器中/usr/lib/games目录为空
宿主机映射目录会自动创建,且在一边操作等同于在另一边操作。
3、宿主机目录不存在,容器映射目录不为空。容器中/usr/lib/locale/C.utf8目录不为空
宿主机映射目录会自动创建,容器映射目录中原来的文件都消失了,在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
4、宿主机映射目录为空,容器映射目录不存在
容器映射目录会自动创建,且在一边操作等同于在另一边操作。
5、宿主机和容器映射目录都为空。
在一边操作等同于在另一边操作。
6、宿主机映射目录为空,容器映射目录不为空
容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
7、宿主机映射目录不为空,容器映射目录不存在
容器映射目录会自动创建,一进去该目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。
8、宿主机映射目录不为空,容器映射目录为空
一进容器映射目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。
9、宿主机和容器映射目录都不为空。
容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
如果想在宿主机中访问容器中的文件,怎么办呢?
1、如果想访问镜像自带的文件,按照上面实践,直接映射是不行的,直接映射的话,在宿主机和容器中访问的都是宿主机目录中的文件。自己想了个办法,在dockerfile的CMD命令中给想访问的文件加个软链接,docker run时把这个软链接所在目录映射出来就行了。
如https://www.cnblogs.com/koushr/p/14560872.html,dockerfile中CMD改成ln -sf /usr/local/bin/redis-cli /app/bin/redis-cli;redis-server /conf/redis.conf,即在容器启动后,给/usr/local/bin/redis-cli文件建个软链接。docker run命令修改为docker run -d --network n1 -p 6380:6380 -v /Users/shengruikou/Desktop/redis:/conf -v /Users/shengruikou/Desktop/redis/bin:/app/bin my_redis:6.2.0,把宿主机的/Users/shengruikou/Desktop/redis/bin目录和容器的/app/bin目录建立映射关系。在容器启动后,就可以在宿主机的/Users/shengruikou/Desktop/redis/bin目录中访问容器的redis-cli文件了。
2、如果想访问容器启动后新生成的文件,则直接在docker run命令中把这个新文件的目录映射出来即可。