Dockerfile VOLUME无法正常工作

dar*_*rix 1 docker dockerfile docker-volume

我真的不习惯使用docker VOLUME了.我有一个普通的dockerfile:

FROM ubuntu:latest  
VOLUME /foo/bar
RUN touch /foo/bar/tmp.txt
Run Code Online (Sandbox Code Playgroud)

我跑了$ docker build -f dockerfile -t test .,它成功了.在此之后,我以交互方式将shell运行到与创建的test映像的运行相关联的docker容器中.就是这样,我跑了$ docker run -it test

观察:

/foo/bar已创建但为.

docker inspect test 安装信息:

"Volumes": {
  "/foo/bar": {}
}
Run Code Online (Sandbox Code Playgroud)

它似乎根本没有安装.这项任务看起来很顺利,但我做错了吗?

编辑:我希望持久保存在此已装入的卷目录中创建的数据.

mic*_*ard 5

必须在RUN之后放置VOLUME指令.

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

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

如果您想知道docker run命令创建的卷的来源:

docker inspect --format='{{json .Mounts}}' yourcontainer
Run Code Online (Sandbox Code Playgroud)

会给出这样的输出:

[{
  "Name": "4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628",
  "Source": "/var/lib/docker/volumes/4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628/_data",
  "Destination": "/foo/bar",
  "Driver": "local",
  "Mode": "",
  "RW": true,
  "Propagation": ""
}]
Run Code Online (Sandbox Code Playgroud)

Source包含您要查找的路径.