我正在运行一些由 docker-compose 文件定义的容器,并且这些容器已在生产中使用。
我发现其中一个容器 (odoo) 正在使用一个数据目录,它在其中放置了一些重要且应保存的与进程相关的文件。
不幸的是,我忘记为数据使用卷来使其持久化,现在想这样做。
我尝试编辑 docker-compose.yml
文件并在 odoo 服务中定义一个卷,例如:
volumes:
- odoo_web_data:/var/lib/odoo
然后运行
docker-compose up -d
重新创建容器。
如果容器是最初创建的,这将起作用,但是,我现在得到的只是一个警告:
<块引用>警告:服务“odoo”正在使用来自前一个容器的卷“/var/lib/odoo”。主机映射“user_odoo_customer_web_data”无效。移除现有容器(使用 docker-compose rm odoo-customer
)以使用主机卷映射。
我猜这意味着它无法挂载,因为文件夹非空并且链接到容器的前一个实例。
如何从主机上正在运行的容器中持久地挂载文件夹?
答案 0 :(得分:1)
您可以尝试先将 /var/lib/odoo
中的所有文件备份到您的主机上:
即
docker run --rm -v c:\migrate:/backup alpine tar -cjf /backup/my_data.tar.bz2 -C /var/lib/odoo ./
然后将该 tar.bz2
导入您创建的 odoo_web_data
卷:
docker run --rm -v odoo_web_data:/volume -v c:\migrate:/backup alpine tar -C /volume/ -xjf /backup/my_data.tar.bz2
将此添加到您的 docker-compose.yml
底部:
volumes:
odoo_web_data:
external: true
然后继续使用 docker-compose up -d
和代码中已有的卷安装再次启动容器。
此时您应该在新命名的卷中拥有所有先前的 /var/lib/odoo
数据,并且容器将从该卷中使用(并存储)它。