我真的不习惯使用docker VOLUME了。我有一个普通的dockerfile:
FROM ubuntu:latest
VOLUME /foo/bar
RUN touch /foo/bar/tmp.txt
我跑$ docker build -f dockerfile -t test .
并且成功了。在此之后,我以交互方式将shell运行到与创建的test
图像的运行相关联的docker容器中。也就是说,我跑了$ docker run -it test
观察:
/foo/bar
已创建,但为空。
docker inspect test
装箱信息:
"Volumes": {
"/foo/bar": {}
}
似乎根本没有安装。这项任务看起来很顺利,但我做错了吗?
编辑:我希望保留在此已装入的卷目录中创建的数据。
答案 0 :(得分:5)
必须在RUN之后放置VOLUME指令。
如Error installing MvvmCross.HotTuna.MvvmCrossLibraries v4.0.0-beta1 in Xamarin Studio中所述:
注意:如果任何构建步骤在声明后更改了卷中的数据,那么这些更改将被丢弃。
如果您想知道docker run
命令创建的卷的来源:
docker inspect --format='{{json .Mounts}}' yourcontainer
将提供如下输出:
[{
"Name": "4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628",
"Source": "/var/lib/docker/volumes/4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628/_data",
"Destination": "/foo/bar",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}]
来源包含您要查找的路径。