Answers:
卷是存储在 /var/lib/docker/volumes/...
您可以在Dockerfile中声明它,这意味着每次从映像启动容器时,即使没有任何选择,也会创建该卷(为空)-v
。
您可以在运行时声明它docker run -v [host-dir:]container-dir
。
结合使用两个(VOLUME
+ docker run -v
)意味着您可以将主机文件夹的内容挂载到容器中保存的卷中/var/lib/docker/volumes/...
docker volume create无需定义Dockerfile,构建映像和运行容器即可创建卷。它用于快速允许其他容器安装该体积。
如果您已在卷中保留了某些内容,但此后删除了该容器(除非使用docker rm -v,否则默认情况下不会删除其关联的卷),则可以将所述卷重新附加到新容器(声明相同的体积)。
请参阅“ Docker-如何访问未连接到容器的卷? ”。
使用docker volume create,可以轻松地将命名卷重新附加到容器。
docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer
# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!
Dockerfile
with VOLUME
和-v /path:/host_path/
标志。的内容VOLUME
将被/host_path/
?的内容覆盖。
docker volume create --name my_volume
后面加上a docker run --volume-from my_volume
,您怎么知道挂载点在哪里?
docker run ...
,如何写入存储在my_volume
卷上的文件中?我不知道...的路径?因为我什么都没定义,所以我正在运行的容器中的容量是多少?我希望我已经足够清楚,因为我绝对不确定我的嗓音:-/
docker volume create --name aname
创建一个命名卷:您在运行时分配一个容器路径docker run -v aname:/apath
::该容器现在已附加一个卷,该卷已安装在其/ apath文件夹中。我已将答案重写为清楚。
VOLUME
将其与volumes-from
运行时参数结合使用时,指令变得很有趣。
鉴于以下Dockerfile:
FROM busybox
VOLUME /myvolume
使用以下方法生成图像:
docker build -t my-bb .
并用以下方法旋转容器:
docker run --rm -it --name my-first-bb my-bb
首先要注意的是,此图像中将有一个名为的文件夹myvolume
。但这并不是特别有趣,因为当我们退出容器时,该体积也将被移除。
在此文件夹中创建一个空文件,因此在容器中运行以下命令:
cd myvolume
touch hello.txt
现在旋转一个新容器,但与以下容器共享相同的体积my-first-bb
:
docker run --rm -it --volumes-from my-first-bb --name my-second-bb my-bb
您将看到其中my-second-bb
包含文件夹hello.txt
中的myvolume
文件。
退出两个容器后,您的卷也将被删除。
--rm
选项启动了容器。我认为提及它可能可行。如果您没有启动容器--rm
,你仍然可以删除容器及其匿名卷带docker rm -v my-container
。