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

lhrbest發表於2020-04-26


【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 getty@tty1.service  

      systemctl mask getty@tty1.service 

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


 


12. /var/lib/docker/containers 佔用過大

    描述: 容器日誌一般存放在/var/lib/docker/containers/container_id/下面, 以json.log結尾的檔案(業務日誌)很大。


 如果docker容器正在執行,那麼使用rm -rf方式刪除日誌後,通過df -h會發現磁碟空間並沒有釋放。原因是在Linux或者Unix系統中,通過rm -rf或者檔案管理器刪除檔案,將會從檔案系統的目錄結構上解除連結(unlink)。如果檔案是被開啟的(有一個程式正在使用),那麼程式將仍然可以讀取該檔案,磁碟空間也一直被佔用




     解決方法1:cat /dev/null > *-json.log


#!/bin/sh 

 

 

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

 

for log in $logs  

        do  

                echo "clean logs : $log"  

                cat /dev/null > $log  

        done  

  

     解決方法2:增加dockerd啟動引數,/etc/docker/daemon.json


{

  "registry-mirrors": ["https://registry.docker-cn.com"],

  "max-concurrent-downloads": 6,

  "insecure-registries":["harbor.master.online.local", "harbor.local.com"],

  "log-driver":"json-file",

  "log-opts": {"max-size":"2G", "max-file":"10"}

}

 


13. umount.nfs device is busy

     描述:


[root@localhost /]# umount /data/share/gaocheng


umount.nfs: /data/share/gaocheng: device is busy


    解決方法:




-v 表示 verbose 模式。程式以 ps 的方式顯示,包括 PID、USER、COMMAND、ACCESS 欄位

-m 表示指定檔案所在的檔案系統或者塊裝置(處於 mount 狀態)。所有訪問該檔案系統的程式都被列出。

   如上所示,有程式佔用了,將其kill掉,再重新取消掛載


   kill -9 25869 45636 131466 

   umount /data/share/gaocheng

 


14. docker hang

    除錯: curl --unix-socket /var/run/docker.sock http://./debug/pprof/goroutine?debug=2


    only found in docker/container/state.go發現想要獲取lock,真特麼得不到,導致所有都等待,暫未發現哪裡給lock了


func (s *State) IsRunning() bool {

s.Lock()

res := s.Running

s.Unlock()

return res

}

goroutine 68266990 [semacquire, 1350 minutes]:

sync.runtime_SemacquireMutex(0xc421004e04, 0x11f0900)

    /usr/local/go/src/runtime/sema.go:71 +0x3d

sync.(*Mutex).Lock(0xc421004e00)

    /usr/local/go/src/sync/mutex.go:134 +0xee

github.com/docker/docker/container.(*State).IsRunning(0xc421004e00, 0xc42995c2b7)

    /root/rpmbuild/BUILD/src/engine/.gopath/src/github.com/docker/docker/container/state.go:250 +0x2d

github.com/docker/docker/daemon.(*Daemon).ContainerStop(0xc420260000, 0xc42995c2b7, 0x40, 0xc421c3cac0, 0xc428235298, 0xc42e5fac01)

    /root/rpmbuild/BUILD/src/engine/.gopath/src/github.com/docker/docker/daemon/stop.go:23 +0x84

github.com/docker/docker/api/server/router/container.(*containerRouter).postContainersStop(0xc420b4bfc0, 0x7f85ac36f560, 0xc42844d3e0, 0x38b7d00, 0xc42b8aaa80, 0xc42d85be00, 0xc42844d290, 0x2a4e3dd, 0x5)

    /root/rpmbuild/BUILD/src/engine/.gopath/src/github.com/docker/docker/api/server/router/container/container_routes.go:186 +0xf0

github.com/docker/docker/api/server/router/container.(*containerRouter).(github.com/docker/docker/api/server/router/container.postContainersStop)-fm(0x7f85ac36f560, 0xc42844d3e0, 0x38b7d00, 0xc42b8aaa80, 0xc42d85be00, 0xc42844d290, 0x7f85ac36f560, 0xc42844d3e0)

    /root/rpmbuild/BUILD/src/engine/.gopath/src/github.com/docker/docker/api/server/router/container/container.go:67 +0x69

github.com/docker/docker/api/server/middleware.ExperimentalMiddleware.WrapHandler.func1(0x7f85ac36f560, 0xc42844d3e0, 0x38b7d00, 0xc42b8aaa80, 0xc42d85be00, 0xc42844d290, 0x7f85ac36f560, 0xc42844d3e0)


 


15 Too many open files的四種解決辦法

一  單個程式開啟檔案控制程式碼數過多


     通過“cat /proc/<pid>/limits”檢視


二 作業系統開啟的檔案控制程式碼數過多


     /proc/sys/fs/file-max”命令來動態修改該值,也可以通過修改"/etc/sysctl.conf"檔案來永久修改該值


三 systemd對該程式進行了限制


      LimitNOFILE=


四 inotify達到上限


      監控機制,可以監控檔案系統的變化。該機制受到2個核心引數的影響:“fs.inotify.max_user_instances”和“fs.inotify.max_user_watches”,其中“fs.inotify.max_user_instances”表示每個使用者最多可以建立的inotify instances數量上限,“fs.inotify.max_user_watches”表示麼個使用者同時可以新增的watch數目


     參考:Too many open files的四種解決辦法


            https://bbs.huaweicloud.com/blogs/7c4c0324a5da11e89fc57ca23e93a89f


     參考:Linux下設定最大檔案開啟數nofile及nr_open、file-max


            https://www.cnblogs.com/zengkefu/p/5635153.html


 


16 docker harbor上映象硬刪除

 docker-compose stop


docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect --dry-run /etc/registry/config.yml

docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect /etc/registry/config.yml


docker-compose start


 


17 failed to disable IPv6 forwarding for container's interface all' in Docker daemon logs 

Issue

If IPv6 networking has been disabled in the kernel, log entries of the following format may be seen in the Docker daemon logs:


Aug 21 11:05:39 ucpworker-0 dockerd[16657]: time="2018-08-21T11:05:39Z" level=error msg="failed to disable IPv6 forwarding for container's interface all: open /proc/sys/net/ipv6/conf/all/disable_ipv6: no such file or directory"

Aug 21 11:05:39 ucpworker-0 dockerd[16657]: time="2018-08-21T11:05:39.599992614Z" level=warning msg="Failed to disable IPv6 on all interfaces on network namespace \"/var/run/docker/netns/de1d0ed4fae9\": reexec to set IPv6 failed: exit status 4"

Root Cause

These log entries are displayed when the Docker daemon fails to disable IPv6 forwarding on a container's interfaces, because IPv6 networking has been disabled at the kernel level (i.e. the ipv6.disable=1 parameter has been added to your kernel boot configuration).


In this situation, the log entries are expected and can be ignored.


Resolution

In a future release of the Docker engine the log level will be updated, so that these entries are only warning messages, as this does not indicate an actionable error case.


  參考:https://success.docker.com/article/failed-to-disable-ipv6-forwarding-for-containers-interface-all-error-in-docker-daemon-logs


 


18. iptables -I FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

    在宿主機上發往docker0網橋的網路資料包文,如果是該資料包文所處的連線已經建立的話,則無條件接受,並由Linux核心將其傳送到原來的連線上,即回到Docker Container內部


 


 


19. malformed module missing dot in first path element

go1.13 mod 要求import 後面的path 第一個元素,符合域名規範,比如code.be.mingbai.com/tools/soa


    go mod 要求所有依賴的 import path 的path 以域名開頭,如果現有專案轉1.13的go mod 模式,且不是以域名開頭則需要修改。


go mod init csi.storage.com/storage-csi







About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2020-04-01 06:00 ~ 2020-04-30 24:00 在西安完成

● 最新修改時間:2020-04-01 06:00 ~ 2020-04-30 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2688478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章