1.WARNING: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.
同事在新虚拟机上安装了Docker,习惯性的先检查一下安装版本及信息。
docker version
docker info
image.png
image.png
发现有告警,显示目前虚拟机上跑的Centos系统运用的xfs文件系统而Docker采用的overlay2,虚拟机上xfs文件系统有个属性ftype设置有问题,有可能导致Docker在使用时报错。(如果overlayfs存储驱动不支持d_type的话,容器在操作文件系统时可能会出现一些奇怪的错误:比如在bootstrap的时候出现Chown error,或者rebuild时发生错误等等。)
Docker的overlay存储驱动利用了很多OverlayFS特性来构建和管理镜像与容器的磁盘结构。自从Docker1.12起,Docker也支持overlay2存储驱动,相比于overlay来说,overlay2在inode优化上更加高效。但overlay2驱动只兼容Linux kernel4.0以上的版本。(注:自从OverlayFS加入kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。)
参考:Docker xfs filesystem without d_type support
关于OverlayFS介绍参见:Red Hat Enterprise Linux-FILE SYSTEMS
如何解决
如果想在CentOS7上允许Docker的overlay2存储驱动,需要升级内核kernel,同时还需要对挂载的device设置ftype。
df -h
xfs_info / //查看挂载点对应的文件系统信息
image.png
可以看到,这里的ftype为0,需将其设置为1。
备份你的数据
重新创建你的文件系统
恢复备份的数据回来
针对重新创建你的文件系统,需要这样做:
将挂载的device卸载
umount /dev/mapper/centos-root //device的路径可以在xfs_info中找到
//如果提示device is busy
umount -l /dev/mapper/centos-root //强制卸载同时要重启
重新格式化,并再次挂载
mkfs.xfs -n ftype=1 /dev/mapper/centos-root //重新格式化device,在此
mount /dev/mapper/centos-root //重新挂载
xfs_info / //查看结果
参考:Проверка XFS файловой системы из под Linux
centos 5.2 使用xfs文件系统
2.Docker安装gitlab容器
本段已单独文章更新,请查看利用GitLab Docker images安装GitLab(填坑)
可以下载gitlab的docker镜像,并将其部署在容器中,详见:GitLab Docker images。
这边要注意的是,external_url的设定。假如内网没有DNS服务器,你可以将该参数填写为该服务器的IP地址,一定不是IP地址+端口号,切记。设置external_url参数可以有如下方式:
通过docker run中加入环境变量
sudo docker run --detach \
--hostname gitlab.example.com \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://ipaddress/'; gitlab_rails['lfs_enabled'] = true;" \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
将进入到容器内,修改gitlab.rb配置文件
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest //先将容器运行,将容器取名为gitlab
docker exec -it gitlab /bin/bash //进入名为gitlab的容器
vi /etc/gitlab/gitlab.rb //编辑gitlab.rb文件,设置extent_url
docker restart gitlab //退出容器后,重启容器
假如你将gitlab配置文件已经挂载到外部存储路径下,只要在相应目录(如这里的/srv/gitlab/config)下修改gitlab.rb文件,并重启容器就可。
3.如何将容器时间和host在一个时区
当我们进入到容器中,通过date查看时间时,发现时UTC时区,和host时区不一致。
image.png
启动容器时候加一下 -v /etc/localtime:/etc/localtime,容器里面就会跟host一个时区了
4.docker docker-machine命令自动补全
在运维时希望尽可能的少敲打字,如何进行命令补全呢。
参考《Install Docker Machine》
但是按照上述方法安装后,依然不能命令自动补全,提示:
docker-machine cr-bash: _get_comp_words_by_ref: 未找到命令
-bash: ((: i < : 语法错误: 期待操作数 (错误符号是 "< ")
原来CentOS没有安装bash-completion,通过yum安装,并重启系统已启用bash-completion
网友评论