{"title": "CentOS6\u4e0b build CentOS5\u7684Docker\u955c\u50cf", "update_time": "2015-01-17 21:14:16", "tags": "images docker centos5", "pid": "318", "icon": "linux.png"}
## 在CentOS6下制作CentOS5的镜像 安装镜像制作工具febootstrap ``` yum -y install febootstrap ``` 使用febootstrap 制作CentOS5镜像目录 ``` febootstrap -i bash \ -i wget -i yum -i iputils -i iproute -i man -i vim-minimal \ -i openssh-server -i openssh-clients -i cronie-anacron -i crontabs \ centos5 centos5-image http://mirrors.aliyun.com/centos/5/os/x86_64/ ``` 将镜像导入到Docker ``` cd centos5-image && tar -c . | docker import - centos5-base ``` 好,下面开始验证镜像,查看镜像列表是否包含centos5-base ``` docker images ``` 运行简单的bash ``` docker run -t -i centos5-base /bin/bash ``` 看起来已经搞好了,不过接下来发现了一个严重的问题。 ## 严重的问题 centos5的镜像执行`rpm -qa`的时候报错 ``` bash-3.2# rpm -qa rpmdb: /var/lib/rpm/Packages: unsupported hash version: 9 error: cannot open Packages index using db3 - Invalid argument (22) error: cannot open Packages database in /var/lib/rpm ``` ## 解决方法 为什么会出现rpmdb的报错? 因为我们使用centos6的yum安装包,导致镜像里的 /var/lib/rpm/Packages 文件的DB格式不能被老的centos5的rpm读取 我们需要重建 /var/lib/rpm/Packages 文件,方法如下: 1. 运行一个容器,然后执行以下命令 ``` # Fix up RPM database rm /var/lib/rpm/* rpm --initdb rpm -i --justdb '/var/cache/yum/*/packages/*.rpm' ``` 2. 将容器commit 为镜像 ``` docker commit 容器id centos5-base-fixed ``` 3. 删掉老的centos5的镜像 ``` docker images rm centos5-base ``` 最后补充一句,如果在CentOS5下用febootstrap 应该不能有这样的问题。不过在CentOS5下 febootstrap 好像没那么好用 ## 参考文档 * http://lists.centos.org/pipermail/centos/2012-December/130752.html