Повторное подключение потерянных томов докеров

Я использую том докера, указанный в моем файле докера, чтобы мои данные могли сохраняться на хосте. Dockerfile выглядит примерно так:

FROM base-image
VOLUME /path/to/something
RUN do_stuff
....

Когда я запускаю контейнер, он создает том (назовем его VolumeA), который я вижу, когда делаю docker volume ls.

Если я остановлюсь и удалю контейнер, VolumeA останется, как и ожидалось.

Мой вопрос: если я запускаю новую версию контейнера, есть ли способ использовать VolumeA вместо того, чтобы создавать новую?


person Chris    schedule 12.05.2016    source источник
comment
Вот почему вы должны были назвать тома   -  person Xiongbing Jin    schedule 12.05.2016
comment
Таким образом, цель VOLUME в файле докеров состоит исключительно в сохранении данных после удаления контейнера, который их создал? Нет возможности повторно использовать эти данные в другом контейнере?   -  person Chris    schedule 12.05.2016
comment
Вы можете, но это не так просто, как именованный том. См. stackoverflow.com/questions/26009619/   -  person Xiongbing Jin    schedule 12.05.2016


Ответы (2)


Я предпочитаю использовать именованные тома, так как их можно легко смонтировать в новый контейнер.

Но для безымянного тома я:

  • запустить мой контейнер (директива VOLUME заставляет его создать новый том по новому пути, который вы можете получить, проверив его)
  • переместите путь старого тома на этот новый путь.

До команды docker volume, я делал это с помощью скрипт: updateDataContainerPath.sh .

Но опять же, в наши дни ни в одном из моих образов нет VOLUME: я создаю тома с отдельными именами (docker volume create) и монтировать их в контейнеры во время выполнения (docker run -v my-named-volume:/my/path)

person VonC    schedule 13.05.2016
comment
Спасибо большое. Удалил VOLUME из моего dockerfile и теперь управляю им с помощью -v во время выполнения. Гораздо более приятное решение. - person Chris; 13.05.2016

Вы можете использовать флаг -v в команде docker run для привязки существующего тома к вашему новому контейнеру докеров.

docker run -v VolumeA:/path/to/something [image]

Также обратите внимание на флаг --volumes-from, чтобы смонтировать тома, используемые или созданные другими контейнерами.

https://docs.docker.com/engine/reference/commandline/run/ https://docs.docker.com/engine/reference/commandline/volume_create/

person erezny    schedule 13.05.2016