4

我真的被 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": {}
}

似乎它根本没有安装。任务看起来很简单,但我做错了吗?

编辑:我希望保留在这个挂载的卷目录中创建的数据。

4

1 回答 1

6

VOLUME 指令必须放在 RUN 之后。

https://docs.docker.com/engine/reference/builder/#volume所述:

注意:如果任何构建步骤在声明卷后更改了卷中的数据,则这些更改将被丢弃。

如果你想知道 dockerrun命令创建的卷的来源:

docker inspect --format='{{json .Mounts}}' yourcontainer

将给出如下输出:

[{
  "Name": "4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628",
  "Source": "/var/lib/docker/volumes/4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628/_data",
  "Destination": "/foo/bar",
  "Driver": "local",
  "Mode": "",
  "RW": true,
  "Propagation": ""
}]

Source包含您要查找的路径。

于 2016-06-15T14:41:01.253 回答