Docker 将匿名卷转换为命名卷

fre*_*etz 16 docker docker-compose

我已经使用 docker 命令行尝试了一个 docker 镜像,但没有指定卷的名称。现在我发现我想继续使用这个容器/图像,但是通过在 docker compose 中定义容器。

保留匿名/未命名卷中的数据并在 docker compose 创建的新容器中使用它们的最佳实践是什么?

  • 我可以以某种方式将未命名的卷转换为命名的卷吗?
  • 或者我应该使用 docker compose 创建一个带有命名卷的新容器并复制数据?
  • 或任何其他选择?

Civ*_*Fan 10

总结解决方法

docker volume create --name <new_volume>
docker run --rm -it -v <old_volume>:/from:ro -v <new_volume>:/to alpine \
    ash -c "cd /from ; cp -av . /to"
docker volume rm <old_volume>
Run Code Online (Sandbox Code Playgroud)

此方法具有使用 docker API 的好处。它使用一个名为的轻量级 Linux 映像alpine及其默认 shellash来运行文件复制,cp -av从旧卷到新命名的卷。


Mos*_*atz 7

您当前无法重命名现有卷。(无论它们之前是否已命名或未命名并且它们的名称是自动生成的,都是如此。)

您可以查看此问题以获取有关此功能实现的更多信息,并添加您的“+1”/“竖起大拇指”以让开发人员知道您需要它。

没有它,据我所知,唯一的好方法是创建新命名的卷并复制数据。