【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 ftypemount /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