Docker 将非空容器文件夹挂载到主机
Docker mount non-empty container folder to host
我正在 运行 安装一些容器,由 docker-compose 文件定义,并且这些容器已在生产中使用。
我发现其中一个容器 (odoo) 正在使用一个数据目录,它放置了一些与进程相关的文件,这些文件很重要,应该保存。
不幸的是,我忘记为数据使用卷以使其持久化,现在想做。
我尝试编辑 docker-compose.yml
文件并在 odoo 服务中定义一个卷,例如:
volumes:
- odoo_web_data:/var/lib/odoo
和运行
docker-compose up -d
重新创建容器。
如果容器是最初创建的,这会起作用,但是,我现在得到的只是一个警告:
WARNING: Service "odoo" is using volume "/var/lib/odoo" from the previous container. Host mapping "user_odoo_customer_web_data" has no effect. Remove the existing containers (with docker-compose rm odoo-customer
) to use the host volume mapping.
我猜这意味着它无法挂载,因为文件夹非空并且链接到容器的前一个实例。
如何从主机上的 运行ning 容器持久挂载文件夹?
您可以尝试先将 /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
数据,并且容器将从该卷中使用(并存储)它。
我正在 运行 安装一些容器,由 docker-compose 文件定义,并且这些容器已在生产中使用。
我发现其中一个容器 (odoo) 正在使用一个数据目录,它放置了一些与进程相关的文件,这些文件很重要,应该保存。
不幸的是,我忘记为数据使用卷以使其持久化,现在想做。
我尝试编辑 docker-compose.yml
文件并在 odoo 服务中定义一个卷,例如:
volumes:
- odoo_web_data:/var/lib/odoo
和运行
docker-compose up -d
重新创建容器。
如果容器是最初创建的,这会起作用,但是,我现在得到的只是一个警告:
WARNING: Service "odoo" is using volume "/var/lib/odoo" from the previous container. Host mapping "user_odoo_customer_web_data" has no effect. Remove the existing containers (with
docker-compose rm odoo-customer
) to use the host volume mapping.
我猜这意味着它无法挂载,因为文件夹非空并且链接到容器的前一个实例。
如何从主机上的 运行ning 容器持久挂载文件夹?
您可以尝试先将 /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
数据,并且容器将从该卷中使用(并存储)它。