如何将非持久化 docker 容器转换为持久化存储(卷)?

时间:2021-03-14 15:34:28

标签: docker docker-compose

问题

我搞得一团糟,为生产启动了一个 prestashop docker 容器(通过 compose),但忘记向其中添加持久卷。我已经建立了我的商店,现在我所有的数据都悬而未决。我需要以某种方式将我当前的 docker 容器转换为具有持久卷的容器。

我尝试过的事情

我已将当前容器中的所有数据复制到本地文件夹,创建了一个新的撰写文件,如果我 chmod -R 777 整个目录,一切都会正常,但人们会因这些类型的犯罪而下地狱,所以这不是一个选项。

由于我不是专家,所以我没有其他想法。

2 个答案:

答案 0 :(得分:1)

您遇到的问题很可能与拥有旧容器中文件的用户 ID/组 ID 相关。当您移动到新容器时,如果 ID 不相同,您就会遇到问题,因此 chmod -R 777 正在解决这个问题,但地狱之门是敞开的。

最好了解哪个用户 ID 和组 ID 应该是文件的所有者,并使用 chownchgrp 从新容器中设置正确的所有者。

答案 1 :(得分:0)

好的,

所以这是一个非常简单的解决方案:

  1. sudo su
  2. 转到使用 docker inspect container 获取长字符串哈希 822adf62adsomethingsomething 可以获得的非持久性容器存储位置。
  3. 然后cd /var/lib/docker/overlay2/822adf62adsomethingsomething/merged。你有你所有的 docker 容器文件。
  4. cp -a whateveryouwant /whereeveryouwant 作为 cp -a 保持权限和所有者不变。
  5. 利润