【docker基础知识】docker坑问题汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhonglinzhang/article/details/85254035

1. Got starting container process caused "process_linux.go:301: running exec setns process for init caused \"exit status 40\"": unknown. from time to time

   解决问题: https://github.com/opencontainers/runc/issues/1740

   most of the memories are consumed by page cache, echo 1 > /proc/sys/vm/drop_caches

2. Rpmdb checksum is invalid: dCDPT(pkg checksums):

     描述:

           rpm数据库损坏需要重建。需要在 yum install … 前使用 rpm –rebuilddb重建数据库

      解决方法:

           RUN rpm --rebuilddb && yum install -y ...

3. Docker宿主机agetty进程cpu占用率100%

    描述:

         使用"docker run"运行容器时使用了 /sbin/init和--privileged参数

    解决方法:

          在宿主机以及Container中运行下述命令              

      systemctl stop [email protected]  
      systemctl mask [email protected] 

4. Failed to get D-Bus connection: Operation not permitted

     描述:

           centos 7.2容器内使用systemctl命令

     解决方法:

           docker run --privileged -d  centos:7.2.1511 /usr/sbin/init

                     

5. 解决ssh登录慢慢的问题

     使用了dns反查,当ssh某个IP时,通过DNS反查相对应的域名,如果DNS中没有这个IP的域名解析,等待超时

     解决方法:/etc/ssh/sshd_config

         设置 UseDNS no                     

6.  /etc/hosts, /etc/resolv.conf和/etc/hostname都是易失

     问题描述:

          /etc/hosts, /etc/resolv.conf和/etc/hostname,容器中的这三个文件不存在于镜像,而是存在于/var/lib/docker/containers/<container_id>,在启动容器的时候,通过mount的形式将这些文件挂载到容器内部。因此,如果在容器中修改这些文件的话,修改部分不会存在于容器的top layer,而是直接写入这三个物理文件中。

     解决方法:

          通过docker run命令的--add-host参数来为容器添加host与ip的映射关系

          通过echo -e "aaa.com 10.10.10.10\n" >> /etc/hosts

7. docker容器centos 7.2镜像支持中文

sudo localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

export LC_ALL="zh_CN.UTF-8"

8. docker容器时间为UTC时间,与宿主机相差8小时

     cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

9. overlayfs: Can't delete file moved from base layer to newly created dir even on ext4

    Centos 提供的新文件系统 XFS 和 Overlay 兼容问题导致, 这个问题的修复在内核 4.4.6以上( https://github.com/moby/moby/issues/9572)

     Fixed in linux 4.5 going to be backported into next 4.4.y and other stable brances. Simple test sequence in commit message (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?)id=45d11738969633ec07ca35d75d486bf2d8918df6 

     解决方法:

1. 停止各个中间服务,
stop容器(docker stop $(docker ps -qa))
systemctl stop docker
备份数据/srv lsof | grep srv

2. 查看磁盘分区fdisk -l , mount | grep srv
umount /dev/mapper/centos-srv
格式化: mkfs.xfs -fn ftype=1 /dev/mapper/centos-srv 
查看ftype是否设置为1: xfs-info /srv |grep ftype

mount /dev/mapper/centos-srv /srv/

3. 恢复数据/srv
systemctl start docker
docker start $(docker ps -qa)

     

10. /var/lib/docker/overlay2 占用很大,占用几百G空间

    描述:这个问题应该是容器内应用产生的数据或者日志造成

    解决方法:

         进入/var/lib/docker/overlay2,du -h --max-depth=1查看哪个容器占用的比较大,我擦一看占用450G,

         一查看发现日志占用的多,这个啥吗应用这么刷日志,是调试遗留的一个容器,一直在刷错误日志,docker kill and docker rm,一下释放了450多G

11. Error starting daemon: error initializing graphdriver: driver not supported

    描述: 使用overlay2存储驱动启动docker daemon报错

    解决方法: 添加配置如下: 

cat /etc/docker/daemon.json

{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}

    或者添加启动参数:

/usr/bin/dockerd --storage-driver=overlay2 --storage-opt overlay2.override_kernel_check=1 

11. 修改docker容器最大文件数(open files)

     直接修改docker container的 /etc/security/limits.conf无效 

宿主机上执行如下操作:

[lin@node1 ~]$ cat /etc/sysconfig/docker

     ulimit -HSn 999999

重起docker daemon进程,systemctl restart docker

猜你喜欢

转载自blog.csdn.net/zhonglinzhang/article/details/85254035