【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
解決問題:
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以上( )
Fixed in linux 4.5 going to be backported into next 4.4.y and other stable brances. Simple test sequence in commit message ()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": ["],
"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
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.
參考:
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
20. WARNING: IPv4 forwarding is disabled. Networking will not work.
報錯:
[root@localhost /]# docker run -it ubuntu /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
解決方式:
第一步:在宿主機上執行echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
第二步:重啟network和docker服務
[root@localhost /]# systemctl restart network && systemctl restart docker
第三步:驗證是否成功
可見完美解決問題。
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寶典今日頭條號地址: ........................................................................................................................ ● 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 ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店: ● 小麥苗出版的資料庫類叢書: 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker 知識彙總Docker
- Docker 基礎知識 - Docker 概述Docker
- Docker基礎知識Docker
- 【Docker】Docker基礎知識(面試一籮筐)Docker面試
- Docker網路配置基礎知識Docker
- MySQL基礎知識點彙總MySql
- linux 基礎知識彙總Linux
- Docker知識總結Docker
- Docker容器學習梳理 - 基礎知識(2)Docker
- Docker容器學習梳理–基礎知識(2)Docker
- Docker容器學習梳理 - 基礎知識(1)Docker
- docker入門知識總結Docker
- docker常用知識點總結Docker
- Linux磁碟管理基礎知識全彙總Linux
- Docker--基礎知識點--20--Commit映象DockerMIT
- Spring基礎知識彙總 Java開發必看SpringJava
- 【Docker】Docker基礎操作Docker
- 藍橋杯知識點彙總:基礎知識和常用演算法演算法
- Java常見知識點彙總(③)——物件導向基礎Java物件
- 多執行緒面試必備基礎知識彙總執行緒面試
- 【Java面試題系列】:Java基礎知識常見面試題彙總 第二篇Java面試題
- Docker--基礎知識點--19--映象原理之分層理解Docker
- docker基礎Docker
- Docker:基礎Docker
- Docker 基礎Docker
- Java多執行緒程式設計基礎知識彙總Java執行緒程式設計
- oracle基礎知識和常見問題Oracle
- Docker入門知識Docker
- iOS 基礎面試題彙總iOS面試題
- Docker 基礎知識 - 使用卷(volume)管理應用程式資料Docker
- Java基礎知識總結Java
- React 基礎知識總結React
- 索引基礎知識總結索引
- MySql基礎知識總結MySql
- php基礎知識總結PHP
- JavaSE基礎知識總結Java
- Rust 基礎知識總結Rust
- docker使用經驗總結(三、Docker compose基礎應用)Docker