Переместите привязку docker на том

На самом деле, я запускаю свои контейнеры, например, так:

docker run -v /nexus-data:/nexus-data sonatype/nexus3
              ^

Прочитав документацию, я обнаружил тома, которыми полностью управляет docker. По некоторым причинам я хочу изменить способ запуска моих контейнеров, чтобы сделать что-то вроде этого:

docker run -v nexus-data:/nexus-data sonatype/nexus3
              ^

Я хочу перенести свой существующий bind-mount на тома.

Но я не хочу терять данные в папке /nexus-data, есть ли возможность перенести эту папку на новый том, не перезагружая все? Поскольку у меня также есть контейнеры Jenkins и Sonar, например, я просто хочу изменить способ получения постоянных данных. Это правильный способ сделать это?


person fmdaboville    schedule 17.04.2018    source источник
comment
Вполне может быть первоклассный способ сделать это, но хакерским решением будет просто монтировать оба в контейнер, а затем копировать из одного в другой изнутри контейнера.   -  person Oliver Charlesworth    schedule 18.04.2018


Ответы (1)


Вы можете попробовать выполнить следующие шаги, чтобы не потерять текущие данные nexus.

#>docker run -v nexus-data:/nexus-data sonatype/nexus3
#>docker copy /nexus-data/. <container-name-or-id>:/nexus-data/
#>docker stop <container-name-or-id>
#>docker start <container-name-or-id>

docker copy скопирует данные из папки /nexus-data вашего хост-компьютера в папку FS контейнера /nexus-data, которая является вашим смонтированным томом.

Дайте мне знать, если у вас возникнут какие-либо проблемы при выполнении следующих шагов.

person fly2matrix    schedule 18.04.2018
comment
А как насчет портов (флаг -p), потому что они уже заняты, я просто поставил другие и после этого можно будет вернуться с нужными портами? - person fmdaboville; 24.04.2018
comment
Например, мой контейнер Nexus использует 8081, и я предпочитаю не менять его. - person fmdaboville; 25.04.2018
comment
Остановите первый контейнер NEXUS (который на самом деле использует 8081), поскольку этот контейнер уже хранит данные в каталоге хоста (/nexus) — у вас есть вся необходимая информация за пределами этого контейнера. Теперь запустите/создайте новый контейнер NEXUS со смонтированным томом (nexus-data) и назначьте требуемый порт 8081, так как на данный момент ваш порт 8081 свободен (старый nexus-контейнер остановлен) - person fly2matrix; 26.04.2018
comment
Действительно, хранение данных имеет мало общего с портом, который прослушивает ваш контейнер Nexus. Вы можете запускать и останавливать контейнеры без потери данных - person Peter F; 07.08.2020
comment
Для меня docker copy /nexus-data/* <container-name-or-id>:/nexus-data не работает, docker cp /nexus-data/. <container-name-or-id>:/nexus-data работает. Копирование файлов с хоста в контейнер Docker - Stack Overflow. - person Jason Law; 22.08.2020