Тома Docker не хранят данные - PullRequest
0 голосов
/ 27 января 2019

Я создал образ докера с помощью скрипта Python, который работает с двумя разными командами.Первый создает файл, который используется при выполнении второго.

Насколько я знаю, я должен использовать том Docker для хранения данных между выполнениями, поэтому я создал том с:

docker volume create myvol

Чтобы затем использовать его при запуске контейнера

$ docker run myimg fit -v myvol:/data
model.h5 stored at /data

Но тогда при выполнении другой команды кажется, что каталог / данные Docker пустые ...

$ docker run predict -v myvol:/data
Error: /data/model.h5 not found

Есть какой-то момент, который я пропускаю?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Командная строка докера чувствительна к порядку.Синтаксис:

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 
0 голосов
/ 27 января 2019

При выполнении этих команд вы должны помнить, что первая часть опции -v всегда равна <path_to_directory_on_host>:<path_to_directory_on_guest>.Вы можете использовать как абсолютные, так и относительные пути к каталогу на вашем хост-компьютере.Итак, во-первых, создайте каталог на вашем хосте с именем data, переместите model.h5 в этот каталог, затем смонтируйте его с ключом -v.

, так что если у меня есть каталог данных в C: \ data onкаталог Windows, который я бы использовал:

docker run <img_name> -v C:\data:/data

, если бы я работал в Unix, а мой каталог данных находился в / usr / data, и я хотел, чтобы он был подключен к / data в моем гостевом контейнере, тогда я бы использовал

docker run <img_name> -v /usr/data:/data
0 голосов
/ 27 января 2019

Убедитесь, что вы используете аргумент -v или --mount для команды запуска Docker. Это гарантирует, что данные действительно хранятся вне контейнера, и вы ничего не потеряете. Подробнее см. https://docs.docker.com/storage/volumes/.

...