我已经用Python脚本构建了一个docker镜像,该脚本可以使用两个不同的命令。第一个创建一个在执行第二个时使用的文件。
据我所知,我必须使用Docker卷在两次执行之间存储数据,因此我使用以下命令创建了一个卷:
docker volume create myvol
要在运行容器时使用它
$ docker run myimg fit -v myvol:/data
model.h5 stored at /data
但是,当执行另一个命令时,似乎Docker目录/ data为空...
$ docker run predict -v myvol:/data
Error: /data/model.h5 not found
我有什么想念的地方吗?
答案 0 :(得分:3)
docker命令行是顺序敏感的。语法为:
docker $args_to_docker run $args_to_run $image_name $override_to_cmd
在命令中,您在图像名称后传递了-v
选项,因此它成为容器中的CMD
值:
$ docker run myimg fit -v myvol:/data
model.h5 stored at /data
这将在容器内部运行cmd fit -v myvol:/data
。
解决方案是如果希望-v
作为run
的选项并更改音量,请更改顺序:
$ docker run -v myvol:/data myimg fit
$ docker run -v myvol:/data predict
答案 1 :(得分:0)
确保对Docker run命令使用-v或--mount参数。这将确保数据确实存储在容器外部,并且不会丢失任何内容。 有关详细信息,请参见:https://docs.docker.com/storage/volumes/。
答案 2 :(得分:0)
运行这些命令时,需要记住-v选项的第一部分始终为<path_to_directory_on_host>:<path_to_directory_on_guest>
。您可以在主机上使用目录的绝对路径和相对路径。因此,第一件事是在主机上创建一个名为data的目录,将model.h5移至该目录,然后使用-v开关将其装入。
因此,如果我的数据目录位于Windows目录的C:\ data中,我将使用:
docker run <img_name> -v C:\data:/data
如果我在UNIX上并且我的数据目录在/ usr / data中,并且我希望将其挂载在我的来宾容器中的/ data上,那么我会使用
docker run <img_name> -v /usr/data:/data