版本说明
- 系统:CentOS Linux release 7.2.1511 (Core)
- 内核:3.10.0-327.el7.x86_64
- docker信息:
1 | Server Version: 17.06.2-ce |
安装准备
在基于xfs文件系统使用overlay存储驱动时,需要格式化参数ftype=1
。否则会出现容器内目录删除失败的问题,见issue#31283。但是CentOS 7.2安装中并未使用这个参数。这里使用一个空分区来重新格式化。
如下,/dev/sdb1
是新的分区,用mkfs进行格式化:
1 | mkfs.xfs -n ftype=1 /dev/sdb1 |
然后将此分区挂载到docker目录上(最好写入fstab中):
1 | mkdir -p /var/lib/docker/ |
可以使用以下命令验证
1 | xfs_info /dev/sdb1 | grep ftype |
使用extfs也不行,见issues#15314,和https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.2_release_notes/technology-preview-file_systems
安装docker
1 | wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm |
也可以使用阿里源
http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
写入配置
1 | mkdir -p /etc/docker |
启动docker
1 | systemctl enable docker |
FAQ
Dockerfile中yum install失败
问题
在Overlay存储驱动下,镜像里如果吗,没有安装yum-plugin-ovl
,会出现:
1 | FROM centos:7.2.1511 |
docker build后出现错误:
1 | Rpmdb checksum is invalid: dCDPT(pkg checksums): vim-filesystem.x86_64 2:7.4.160-2.el7 - u |
分析
解决1:
添加RUN yum install -y yum-plugin-ovl
解决2
RUN touch /var/lib/rpm/* && RUN yum install -y <packages-to-installed>
too many links
问题
在Docker build或者pull时候,出现以下错误:
1 | /data/docker/runtime/overlay/49d96405b7d1ab2cc1c9f815347cf9716c3088b2db10ca3d36a894948b1e1a5c/root/var/lib/yum/yumdb/p/cf1f195f6bf8d654d694b941ead72c4c51798536-pcre-8.32-15.el7_2.1-x86_64/checksum_type /data/docker/runtime/overlay/1044d44c019cdd45df59c6df727dfef476decdc976477ab1124c0a0bf5735e10/tmproot559734426/var/lib/yum/yumdb/p/cf1f195f6bf8d654d694b941ead72c4c51798536-pcre-8.32-15.el7_2.1-x86_64/checksum_type: too many links |
分析
由于硬链接数超出限制,见issues#32732
解决
清理镜像,减少镜像层数。
RLimit
系统默认的是1024:4096。如果没有修改过,docker会调整到Hard Limit。如果想要更大的,可以:
- 修改
/etc/docker/daemon.json
1 | { |
目前的版本中对这一配置有以下bug,见issues#1513:
1 | unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives don't match any configuration option: default-ulimits |
已有PR#32547。
- 修改
/usr/lib/systemd/system/docker.servicevice
中添加
1 | [Service] |
重启docker
- 添加启动参数
1 | dockerd --default-ulimit nofile=65535:65535 --default-ulimit nproc=65535:65535 |
- 单个容器设置
上面都是设置全局的。也允许单个容器的是设置
1 | docker run --ulimit nofile=65535 ... |