微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

复制 docker 卷

如何解决复制 docker 卷

我想更新一些容器。为了测试,我想创建相应卷的副本。为这个新卷设置一个新容器。

这和cp -r volumeOld volumeNew一样简单吗?

或者我需要注意什么?

解决方法

要克隆 docker 卷,您可以将文件从一个卷传输到另一个卷。为此,您必须手动创建一个新卷,然后启动一个容器来复制内容。

有人已经为此编写了一个脚本,您可以使用它:https://github.com/gdiepen/docker-convenience-scripts/blob/master/docker_clone_volume.sh

如果没有,请使用以下命令(取自脚本):

# Supplement "old_volume" and "new_volume" for your real volume names

docker volume create --name new_volume

docker container run --rm -it \
           -v old_volume:/from \
           -v new_volume:/to \
           alpine ash -c "cd /from ; cp -av . /to"
,

在 Linux 上,它可以像复制目录一样简单。 Docker 将卷保存在 /var/lib/docker/<volume_name> 中,因此您可以简单地将源卷的内容复制到另一个名称的目录中。见下文:

# Create a container with 'source_volume' mounted at
# /data and write 'foo' in /data/foo.txt
docker run --rm -v source_volume:/data alpine ash -c "echo 'foo' > /data/foo.txt"

# Read the contents of the 'foo.txt' file
cat /var/lib/docker/volumes/source_volume/_data/foo.txt
foo

# Create a copy of the volume and name it 'target_volume' (-p to preserve permissions)
cp -rp /var/lib/docker/volumes/source_volume /var/lib/docker/volumes/target_volume

# Run a new container,mounting the new 'target_volume' and
# reading contents of the /data/foo.txt
docker run --rm -v target_volume:/data alpine ash -c "cat /data/foo.txt"
foo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。