Docker卷每次都会重新创建一个新的目标路径

3
我已经创建了以下的Docker文件。
FROM resin/rpi-raspbian:jessie-20160831
.. 
RUN mkdir -p /usr/bin/asmp
COPY src /usr/bin/asmp/
VOLUME /usr/bin/asmp/data
..

复制操作会复制这样一个目录结构:
data
   db.sqlite3 
web
    ...
worker
    ...

我只是启动一个容器,类似于这样:

docker run -p 8000:8000 asmp

当我进行检查时,我看到了这个:
 "Mounts": [
        {
            "Name": "30ccc87580cd85108cb4948798612630640b5564f66de848a4e2f77db8148d3a",
            "Source": "/var/lib/docker/volumes/30ccc87580cd85108cb4948798612630640b5564f66de848a4e2f77db8148d3a/_data",
            "Destination": "/sys/fs/cgroup",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        },
        {
            "Name": "c4473031d209eb29d3f454be68325c6b1f33aa660185bf57e8abb91a56bb260e",
            "Source": "/var/lib/docker/volumes/c4473031d209eb29d3f454be68325c6b1f33aa660185bf57e8abb91a56bb260e/_data",
            "Destination": "/usr/bin/asmp/data",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],

当我停止容器(通过强制杀死它)再重新启动时,它会创建一个新的卷到不同的目录。所以我想知道如何处理这种情况?我是开始/停止容器不对吗?或者应该用不同的方式指定卷?我知道可以指定目标路径,但我应该在docker文件中指定吗?我更喜欢在docker文件中指定卷设置,因为run命令已经有很多参数来重定向端口和设备了...你有什么想法吗?
1个回答

2
当您运行容器时,必须指定卷的目标位置。了解有关卷的更多信息docker run -p 8000:8000 --volume=<path_on_host>:/usr/bin/asmp/data asmp

如果你仍然需要在运行命令中定义它,那么在Dockerfile中定义它的意义是什么? - Maarten Kieft
不幸的是,您无法将其定义为Dockerfile。让我向您展示Dockerfile卷参考 VOLUME只接受一个参数,这可以是包含容器内挂载点的字符串或字符串数组。 - Bukharov Sergey
让我们来看一下docker-compose工具。它允许您编写配置文件,您可以在其中定义容器运行的所有变量。 - Bukharov Sergey
谢谢,我会查看你提供的信息。但是在Dockerfile中定义它的意义是什么? - Maarten Kieft
在Dockerfile中,您可以指定包含容器外部信息的目录,无论您如何运行容器,例如日志、媒体文件。 Dockerfile定义容器的合同(接口)。当您运行容器时,只需指定存储此信息的确切位置即可。 可能可以在dockerfile中省略Volume指令。 Docker有时很奇怪。 - Bukharov Sergey
在Dockerfile中不能定义特定的主机目录,但可以指定一个卷并且它应该跨docker运行保留。 Docker然后管理主机位置,即Maarten上面长长的/var/lib/docker ...路径。然而,它在docker运行之间不重新使用它们,这确实引发了一个问题,即Dockerfile中VOLUME命令的目的是什么。我和Maarten有同样的问题,并完全同意他的看法,认为它应该可行。 - Alec Rooney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接