如果你想复制由docker-compose管理的卷,你还需要在创建新卷时复制特定的标签。否则docker-compose会抛出类似Volume already exists but was not created by Docker Compose的错误。 通过MauriceNino扩展该解决方案,下面这些行对我很有用:
# Supplement "proj1_vol1" and "proj2_vol2" for your real volume names
docker volume inspect proj1_vol1 # Look at labels of old volume
docker volume create \
--label com.docker.compose.project=proj2 \
--label com.docker.compose.version=2.2.1 \
--label com.docker.compose.volume=vol2 \
proj2_vol2
docker container run --rm -it \
-v proj1_vol1:/from \
-v proj2_vol2:/to \
alpine ash -c "cd /from ; cp -av . /to"
4条答案
按热度按时间igsr9ssn1#
要克隆Docker卷,您可以将文件从一个卷转移到另一个卷。为此,您必须手动创建一个新卷,然后启动一个容器来复制内容。
有人已经为此编写了一个脚本,您可以用途:https://github.com/gdiepen/docker-convenience-scripts/blob/master/docker_clone_volume.sh
如果没有,请使用以下命令(取自脚本):
azpvetkf2#
在Linux上,这就像复制一个目录一样简单。Docker将卷保存在
/var/lib/docker/volumes/<volume_name>
中,因此您可以简单地将源卷的内容复制到另一个名称的目录中:wwwo4jvm3#
如果你想复制由docker-compose管理的卷,你还需要在创建新卷时复制特定的标签。否则docker-compose会抛出类似
Volume already exists but was not created by Docker Compose
的错误。通过MauriceNino扩展该解决方案,下面这些行对我很有用:
顺便说一句,这似乎也是重命名Docker卷的唯一方法。
neekobn84#
在我的工作中,我使用this script来:
但是,该脚本对卷的命名做了一些假设,因此请在应用该脚本之前阅读自述文件说明。