普通网友 2022-01-21 17:02 采纳率: 40%
浏览 63
已结题

docker commit 将容器打包成镜像,为什么容器里的文件带不进去?

我使用centos基础镜像创建的容器,然后在里面放了jdk和tomcat,然后和sh脚本,然后使用docker commit打包成镜像,最后再根据新镜像创建容器,发现容器里面并没有我打包的文件。请问是什么原因?

img

img

  • 写回答

4条回答 默认 最新

  • 禾糖月色 2022-01-24 14:20
    关注

    回忆一下你的基础镜像启动时是否用到-v参数,这是挂载,如果用到,那你应该很好理解了,因为docker的挂载是将宿主机的文件挂载到容器的目录,实际存储在宿主机上,而不是容器里,如果基于此打包,是不会将挂载的文件打包到新容器内的。

    docker run -itd --name test1 -v /Users/xxx/test:/data centos:centos7
    835ba278667c2dc8c5746554c2f829317cdafbc5d7e72c00a2fd5e69b6c659df
    
    / % docker ps
    CONTAINER ID   IMAGE            COMMAND       CREATED         STATUS         PORTS     NAMES
    835ba278667c   centos:centos7   "/bin/bash"   9 seconds ago   Up 3 seconds             test1
    a8c40bb629e5   centos:centos7   "/bin/bash"   4 days ago      Up 4 days                base
    
    # 我在/Users/xxx/test 目录写了一个demo.txt,然后在容器中执行,容器中可以看到这个文件
    / % docker exec -it 835b ls -l /data
    total 96
    -rw-r--r-- 1 root root 96658 Jan 24 06:09 demo.txt
    
    # 根据此容器commit成镜像
    docker commit -p 835b test2
    sha256:dde9ceeb2787929c82375ea636f984ea02e2e22d44d124589f3108321d6b0570
    # 根据新镜像运行新容器test2
    docker run -itd --name test2 dde9
    6c43c58aa47e67c69b05269fdf6a07353b8e9e612a86d4effb3d6c457cf38ea
    # 查看新容器/data目录下是否有demo.txt
    docker exec -it 6c43 ls -l /data
    total 0
    # 显然没有,新容器不会重复上一个容器的映射,如果需要映射挂载,仍然需要重新-v
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 1月21日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵