Я опробовал образ docker с помощью командной строки docker без указания имен томов. Теперь я обнаружил, что хочу продолжать использовать этот контейнер / изображение, но путем определения контейнера в docker compose.
Что такое наилучшая практика для хранения данных из анонимных / неназванных томов и использования их в новом контейнере, созданном docker compose?
Могу ли я каким-то образом преобразовать неназванные тома в именованные?
или я должен создать новый контейнер с помощью docker compose с именованными томами и скопировать данные?
Преимущество этого метода заключается в использовании docker API. Он использует облегченный образ Linux, называемый alpine и его оболочка по умолчанию, ash чтобы запустить копирование файла, cp -av от старого тома к новому названному тому.
В настоящее время вы не можете переименовать существующие тома. (Это верно независимо от того, были ли они ранее названы или были безымянными, и их имена были сгенерированы автоматически.)
Вы можете видеть этот вопрос для получения дополнительной информации о реализации этой функции, а также добавьте свой "+1" / "Большой палец вверх", чтобы сообщить разработчикам, что вы этого хотите.
Без этого, насколько я знаю, единственный хороший способ сделать это - создать новый именованный том и скопировать данные.
На момент написания этой статьи единственным вариантом было скопировать данные. Детали могут варьироваться в зависимости от вашей конкретной настройки. Общий список шагов, которые необходимо выполнить, выглядит следующим образом:
Остановите и удалите исходный контейнер, чтобы создать новый том на шаге 3.
docker stop NAMEdocker rm NAME# ordocker-compose stop SERVICEdocker-compose rm SERVICE
В некоторых случаях вы можете отложить удаление исходного контейнера, например, при переключении с docker-compose анонимный том для docker-compose именованный том. В этом случае up создало бы новый том. И вы можете приступить к копированию данных. Но даже в этом случае рекомендуется остановить контейнер, чтобы избежать изменения данных при их копировании. И вы должны удалить исходный контейнер для docker-compose чтобы переключиться на новую громкость (обратите внимание на предупреждения).
В некоторых случаях это на самом деле не требуется, например, при переключении с автономных контейнеров на docker-compose.
Изменить docker-compose.yml если применимо.
Запустите новый контейнер для создаваемого нового тома.
Автономные контейнеры:
docker run ...# ordocker-compose up -d
Остановите новый контейнер, чтобы избежать изменения данных.
docker stop ...# ordocker-compose stop
В случае перехода, например, на автономный контейнер с именованным томом, вы можете просто создать том вместо запуска / остановки контейнера.
Скопируйте данные.
docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \ bash -c ' shopt -s dotglob # rm -r /to/* # e.g. pg might have populated the new volume cp -r /from/* /to '
Где SRC_VOLUME, DST_VOLUME - имя тома, идентификатор или абсолютный путь к каталогу на хосте.
Чтобы перечислить тома, прикрепленные к контейнеру, используйте: