Docker在容器运行后导出数据

本文介绍了如何在Docker容器运行后管理数据,包括如何追加数据目录挂载和文件拷贝。提供了三种方法,分别是通过修改容器配置文件挂载新目录、直接在宿主机挂载数据以及使用`docker cp`命令进行文件拷贝。对于已运行的容器,推荐使用`docker cp`简单快捷地复制文件。
摘要由CSDN通过智能技术生成

起因

  • 经常在docker启动容器后 或 在里面安装了很多模块后忘记挂载某些数据目录。备忘

解决方案

方案1 (未测试)

  • 把容器保存为镜像,然后用-v参数添加新的卷。需要停止相关容器,有点麻烦
  • 1)查看容器 & 停止容器 & 停止docker服务

    docker  ps -a       
    docker stop f503  
    systemctl stop docker
    

    2)修改文件(貌似未停止docker服务的话,修改的配置文件会被自动覆盖)。

    vi   /var/lib/docker/containers/{container_id}/hostconfig.json
    追加新端口: 找到 这个 PortBindings 值。在这个json集合里边
    
     
    "PortBindings": {
         "80/tcp": [
             {
                 "HostIp": "",
                 "HostPort": "80"
             }
         ],
         "8888/tcp": [
             {
                 "HostIp": "",
                 "HostPort": "8888"
             } 
         ]
     }
    追加目录映射:修改hostconfig.json中开头的 “Binds”部分
    
    "Binds": ["/webroot/www/go/goweb:/www/go/src/goweb", "/webroot/www/go/diyikaoshi:/www/go/src/diyikaoshi"],

    若是失败 则修改 vi /var/lib/docker/containers/容器ID/config.v2.json(参考: https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container)。

    	"MountPoints": {
    		"主机路径": {
    			"Source": "主机路径",
    			"Destination": "容器路径",
    			"RW": true,
    			"Name": "",
    			"Driver": "",
    			"Type": "bind",
    			"Propagation": "rprivate",
    			"Spec": {
    				"Type": "bind",
    				"Source": "主机路径",
    				"Target": "容器路径"
    			}
    		}
    	}

    3)启动docker服务 & 启动容器

    systemctl start docker
    docker start f503
    

方案2 (未测试)

 使用 mount 宿主机的数据到容器内 rootfs 内。

        docker inspect查看容器的信息,MergedDir就是容器的rootfs在宿主机的路径

        通常是/var/lib/containers/overlay/{containerid}/这样的一个路径

需要进入宿主机,执行挂载命令

mount --bind /hostdir/data/ /var/lib/containers/overlay/{containerid}/mnt/data

然后你在容器内,就可以看到宿主机的数据目录了

ls /mnt
data

如果不能进入宿主机,而是在容器内

那么基本上不可能完成这个需求了

        

方案3 (推荐)

,我的需求仅仅是将 docker 容器内的数据文件 CP 出来而已。

docker cp [文件] [容器id]:/[拷贝文件存放路径]

例如:
[root@localhost opt]# docker cp index.html f9ff84d136c4://opt    # 将文件从宿主机cp到容器中

[root@localhost opt]# docker cp f9ff84d136c4://opt/netbox.sql /opt    # 将文件从容器cp到宿主机中

参考:

        在已运行的docker中增加映射端口和映射目录 – 26点的博客 

        在docker容器上添加新的映射卷 - 宋海宾 - 博客园

        https://www.zhihu.com/question/339098255/answer/2185404203

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值