🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 命令挂载 语法:docker run –it –v /宿主机绝对路径目录:/容器内目录\[:权限\] 镜像名或镜像ID ![](https://img.kancloud.cn/de/11/de11ac1afa4ad4a86bf53a9be2047776_804x45.png) 可通过docker inspect 镜像名称或镜像ID查看镜像的详细信息 ![](https://img.kancloud.cn/98/d8/98d89ec6ee3abf617d53c379f1f2915d_663x193.png) 容器和宿主机之间可以进行数据的共享 ![](https://img.kancloud.cn/47/8e/478ef5c3a696c7da478bdf6587c7ae79_731x81.png) 比如说将上面的内容写入到/hostDataVolume中以后,我们在容器内也可以看到该文件 ![](https://img.kancloud.cn/fc/f8/fcf8aab63e4e7d58340e7cd0d13ea67d_774x120.png) 此时我们查看容器内的/dataVolumeContainer目录,发现存在一个hostText的文件,并且文件内容是我上面通过重定向>写入的。 ![](https://img.kancloud.cn/e8/ab/e8ab7550f6e69e0e1d8a395dd1142e8d_897x181.png) 我们在容器内向hostText文件追加了一个文本内容,此时通过宿主机查看hostText文件,发现也能看到该文本内容。(因为服务器不支持中文的原因,造成的部分字符乱码) ![](https://img.kancloud.cn/99/e7/99e748b61387519968bf2f14d3bd6b13_518x85.png) 此时说明**通过数据卷,可以实现宿主机和容器间的数据保存** 当容器停止退出后,如果宿主机的卷挂载目录文件有变动,重新启动容器后,容器内的卷挂载目录会和宿主机卷挂载目录的文件内容自动同步。 ##### 带权限的挂载 ![](https://img.kancloud.cn/07/e7/07e79cac2a2bfecbf97878381abcf317_758x44.png) ro:Read-Only,中文意思就是只读 rw:Read,Write,可读可写 ![](https://img.kancloud.cn/5b/b6/5bb6b7a93d8f4396ad75e76ee6183cea_385x194.png) 此时容器内**只能进行读操作,不能进行修改和写入** ![](https://img.kancloud.cn/41/95/4195b221cb05761b8b331ef6153cd03c_662x60.png) ##### 解决方案:Docker挂载主机目录Docker访问出现cannot open directory:Permission denied(未验证) 在挂载目录后加一个—privileged=true参数 如:docker run –it –v /宿主机目录绝对路径:/容器目录绝对路径 **–privileged=true** 镜像ID或镜像名称 #### Dockerfile添加数据卷 1. 根目录下新建docker文件夹并进入 ![](https://img.kancloud.cn/2b/9d/2b9d74ae0019bddb7313f707a24ee548_354x30.png) 1. 在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷 语法: VOLUME\[“/dataVolumeContainer1”,”/dataVolumeContainer3”,”/dataVolumeContainer3”\] 说明: 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。 1. Dockerfile构建 \[root@izikh2x5epj8p6z docker\]# vi Dockerfile \# 数据卷测试 \# 来自于哪个镜像 FROM centos \# 数据卷名称1,数据卷名称2,... VOLUME \["/dataVolumeContainer1","/dataVolumeContainer2"\] \# 输出回显信息 CMD echo "finished,------>success" \# 相当于 docker run -it -v /宿主机目录1:/dataVolumeContainer1 -v /宿主机目录2:/dataVolumeContainer2 centos /bin/bash CMD /bin/bash 1. docker build构建Dockerfile文件,生成新镜像 语法:docker build –f Dockerfile文件位置 –t 新镜像名称 新镜像生成位置 ![](https://img.kancloud.cn/4d/38/4d3834d3a53ed9954b48e42c8400837c_886x373.png) 通过docker images查询本地镜像信息,发现多了一个我们生成的gotojava/centos的镜像 ![](https://img.kancloud.cn/c1/70/c17005892d62d0bbad47096ee36461f3_796x122.png) 1. Run我们已经生成的镜像 ![](https://img.kancloud.cn/bb/25/bb25565e63a3787ed38f03f832e4606c_568x40.png) 查看镜像根目录,发现有两个数据卷1和数据卷2 ![](https://img.kancloud.cn/7c/e0/7ce06c988c95c059639af0fe7302c0ef_819x85.png) 1. 查看数据源对应的主机位置 可以使用docker inspect 容器ID或容器名称查看容器中的数据卷和宿主机上对应的目录位置 ![](https://img.kancloud.cn/68/1a/681a16c29b9bd9222736c94539b4184f_1096x415.png) CentOS7下的默认地址为: /var/lib/docker/volumes/bf72aebc25e62d53e54121d162085a663e78ffc9e188d58ee567c4f5edf7dc4f/\_data