Docker笔记(持续更新)

1.WARNING: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.

同事在新虚拟机上安装了Docker,习惯性的先检查一下安装版本及信息。

docker version
docker info

Docker笔记(持续更新)_第1张图片
image.png

Docker笔记(持续更新)_第2张图片
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 /    //查看挂载点对应的文件系统信息
Docker笔记(持续更新)_第3张图片
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

你可能感兴趣的:(Docker笔记(持续更新))