当我学习有关docker的方法时,请多多包涵。我正在使用v1.11.1
我正在制作一个Dockerfile,并希望指定该容器的文件夹应该保留,这仅应针对每个用户(运行该容器的计算机)保留。我最初以为包括:
VOLUME /path/to/dir/to/persist
足够了,但是当我使用启动容器docker run -t -i myimage:latest bash
并手动添加文件时,exit
我希望能够再次找到我的文件。但是当我再次运行映像时(如上所述),添加的文件不再存在。
我读过一些书,但是关于VOLUMES的使用,答案似乎已经过时,或者建议我不想做的事情是:
-v
在运行命令中使用我做错了什么事?任何帮助将不胜感激。
干杯们。
更新:我可以使用命名卷来持久化数据,即:docker run -v name:/path/to/persist -t -i myimage:latest bash
但是,使用包含的Dockerfile进行构建是VOLUME name:/path/to/persist
行不通的。
不是很明显的是,您每次执行“ docker run”时都在创建一个全新的容器。每个新的容器将具有一个新的体积。
因此,您的数据得以保留,但您没有从写入它的容器中读取数据。
样本Dockerfile
FROM ubuntu
VOLUME /data
正常建造
$ docker build . -t myimage
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
---> bd3d4369aebc
Step 2 : VOLUME /data
---> Running in db84d80841de
---> 7c94335543b8
现在运行两次
$ docker run -ti myimage echo hello world
$ docker run -ti myimage echo hello world
看看卷
$ docker volume ls
DRIVER VOLUME NAME
local 078820609d31f814cd5704cf419c3f579af30672411c476c4972a4aad3a3916c
local cad0604d02467a02f2148a77992b1429bb655dba8137351d392b77a25f30192b
“ docker rm”命令具有特殊的“ -v”选项,该选项将清除与容器关联的所有卷。
$ docker rm -v $(docker ps -qa)
使用上一个示例中构建的相同docker镜像创建一个容器,其唯一目的是通过其卷来持久化数据
$ docker create --name mydata myimage
启动另一个将一些数据保存到“ / data”卷中的容器
$ docker run -it --rm --volumes-from mydata myimage bash
[email protected]:/# echo hello world > /data/helloworld.txt
[email protected]:/# exit
启动另一个容器以检索数据
$ docker run -it --rm --volumes-from mydata myimage cat /data/helloworld.txt
hello world
清理,只需删除容器并指定“ -v”选项以确保清理其体积。
$ docker rm -v mydata
笔记:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句