1. 程式人生 > >【docker基礎知識】docker坑問題彙總

【docker基礎知識】docker坑問題彙總

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無效 

宿主機上執行如下操作:

[[email protected] ~]$ cat /etc/sysconfig/docker

     ulimit -HSn 999999

重起docker daemon程序,systemctl restart docker