Docker 卷不保留数据
Docker volumes not keeping data
我已经构建了一个 docker 图像,其中包含一个 python 脚本,该脚本使用两个不同的命令。第一个创建一个文件,在执行第二个时使用。
据我所知,我必须使用 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
我有什么遗漏的地方吗?
确保在 Docker 运行 命令中使用 -v 或 --mount 参数。这将确保数据真正存储在容器之外,并且您不会丢失任何东西。
请参阅:https://docs.docker.com/storage/volumes/ 了解详细信息。
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
当运行这些命令时你需要记住-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
我已经构建了一个 docker 图像,其中包含一个 python 脚本,该脚本使用两个不同的命令。第一个创建一个文件,在执行第二个时使用。
据我所知,我必须使用 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
我有什么遗漏的地方吗?
确保在 Docker 运行 命令中使用 -v 或 --mount 参数。这将确保数据真正存储在容器之外,并且您不会丢失任何东西。 请参阅:https://docs.docker.com/storage/volumes/ 了解详细信息。
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
当运行这些命令时你需要记住-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