docker commit无法保存对容器的修改,请大神帮忙看看!
docker吧
全部回复
仅看楼主
level 2
淡薄心境 楼主
下面那是我详细的操作步骤:
-------------------步骤1 查看当前所有的镜像-----------------------------
[root@localhost dev]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tomcat latest 53ea00bc398f 5 weeks ago 350 MB
centos 1.0 60e65a8e4030 7 weeks ago 196.6 MB
-------------------步骤2,启动容器centos:1.0,并新增一些目录和文件-----------------------------
[root@localhost dev]# docker run -i -t --name centos1.0 centos:1.0 /bin/bash
[root@43fa193cabd2 /]# cd dev
[root@43fa193cabd2 dev]# mkdir abc
[root@43fa193cabd2 dev]#
[root@43fa193cabd2 dev]# cd abc
[root@43fa193cabd2 abc]# touch aaa.txt
[root@43fa193cabd2 abc]# vi aaa.txt
[root@43fa193cabd2 abc]# exit
exit
-------------------步骤3 查看刚才那个容器的ID-----------------------------
[root@localhost dev]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43fa193cabd2 centos:1.0 "/bin/bash" 52 seconds ago Exited (0) 14 seconds ago centos1.0
-------------------步骤4 根据刚才那个容器的ID,commit一个新的镜像centos:2.0-----------------------------
[root@localhost dev]# docker commit 43fa193cabd2 centos:2.0
547fab3341a37d912d29e80d6776967fbe4ed5d0b561fdd0687a484bb8eba443
-------------------步骤5 根据新的镜像centos:2.0启动一个容器,查看修改内容-----------------------------
[root@localhost dev]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 2.0 547fab3341a3 6 seconds ago 196.6 MB
tomcat latest 53ea00bc398f 5 weeks ago 350 MB
centos 1.0 60e65a8e4030 7 weeks ago 196.6 MB
[root@localhost dev]# docker run -i -t --name centos2 centos:2.0 /bin/bash
[root@3e3929fd59e0 /]# cd dev
[root@3e3929fd59e0 dev]# ls
console fd full fuse kcore mqueue null ptmx pts random shm stderr stdin stdout tty urandom zero
//最后发现新容器的/dev/目录下没有之前创建的abc/aaa.txt。
//请问是为什么会这样?
//为这个问题忙了一整天了,心都碎了!
2016年02月18日 11点02分 1
level 1
不知道楼主解决没有
我也是刚开始学,commit好像就是还没保存住,建议push以后再pull就好了,具体原理还需仔细学习后才了解,另需要先登录,然后commit和push需要加自己的标识
docker login
docker commit cid username/imagename
docker push username/imagename
2016年03月20日 05点03分 2
原因是我修改的是/dev目录下的文件,/dev目录下的文件是不会保存的。具体原因暂时不明。换一个目录修改文件,再commit就可以保存了。
2016年03月22日 14点03分
level 1
你好,刚才看了下百度的源码分析,感觉这位老师讲的不错,docker的基础image其实就是一个发行版本而已,这也就是为什么docker基于cgroup和ns以及union mount以节省资源以及image的增量的原因。
docker在启动时会引用一份公用的rootfs,而dev就在这里,rootfs是公用的,并且根据不同的kernel分为不同父层子层的image以实现kernel层image的复用,整个docker系统使用COW系统实现增量修改。所以应该是共用这个原因导致的不可修改,可修改部分仅为rootfs上层挂在的的read-write层,即为commit可提交的层级。
没有阅读源码还是有点模糊,待我慢慢研究。。。
2016年03月23日 16点03分 3
非常感谢,你发的内容对我很有用!
2016年03月29日 12点03分
回复淡薄心境:不客气
2016年05月29日 09点05分
level 1
2016年03月23日 16点03分 4
[呵呵]谢谢!
2016年03月29日 12点03分
level 4
看dockerfile,dev文件夹可能被配置为volume了,这样commit无法保存配置
2016年05月14日 07点05分 5
level 1
--cap-add=SYS_ADMIN
2017年03月14日 09点03分 6
1