— Docker虛擬化故障 —
Docker虛擬化主要有三類故障:
應用故障:應用執行狀態與預期不一致。
容器故障:無法正確創建、停止、更新容器等。
集群故障:集群創建失敗、更新失敗、無法連接等。
— Docker虛擬化故障排錯 —
所有的Docker虛擬化故障排查診斷,都可以通過Docker命令行工具或者Web控制台來完成。
通過WEB控制台查看,需要自建控制台,對於Docker運維管理員來說,命令行工具排錯是一個不錯的幫手。
— 故障排錯案例1 —
案例描述:
生產環境,全新安裝的Docker無法啟動,報錯信息如下:
systemctl start docker.service Job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" for details
通過journalctl -xe命令查看啟動的詳細日志,啟動daemon錯誤,因為Selinux不支持,Selinux阻擋了Docker引擎的啟動.
解決方案:
如上問題,解決方法有兩種:
1.Selinux主配置文件:
/etc/selinux/config,將配置文件中enforcing設置為disabled,然后重啟系統,然后重啟docker引擎即可。
2.docker主配置文件:
/etc/sysconfig/docker,將配置文件中--selinux-enabled選項為false,改成:--selinux-enabled=false即可。
— 故障排錯案例2 —
案例描述:
Docker虛擬化引擎報錯信息如下:
chown socket at step GROUP: No such process
解決方案:
如上錯誤提示是因為Docker無法找到Group組信息,docker組有可能被誤刪除,解決方法有兩種:
1.創建宿主機docker組即可,命令:groupadd docker;
2./usr/lib/systemd/system/docker.socket文件,SocketGroup=修改為root也可以;
— 故障排錯案例3 —
案例描述:
Docker虛擬化引擎報錯信息如下:
如上錯誤提示是因為Linux操作系統沒有更多的Loopback 設備給Docker使用。
解決方案:
創建更多的Loopback設備即可,命令如下:
for i inseq 0 6;do mknod -m 0660 /dev/loop$i b 7 $i;done
— 故障排錯案例4 —
案例描述:
Docker命令執行,報錯如下:
Cannot connect to the Docker daemon at unix: ///var/run/docker.sock. Is the docker daemon running?
根據如上錯誤提示,該錯誤很明顯可能是docker沒有啟動。
解決方案:
檢測docker進程是否啟動,ps -ef|grep docker,如果沒有啟動,啟動Docker即可。
檢測Docker進程存在,但是無法連接,可以重啟一下Docker服務,檢測一下Sock路徑是否正確;
— 故障排錯案例5 —
案例描述:
Docker獲取遠程鏡像,報錯信息如下:
Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io
該錯誤表示無法連接遠程倉庫Docker.io。
解決方案:
查看本地是否配置DNS,能否ping通docker.io;
如果能夠ping通,但是下載還是比較慢,可以修改Docker倉庫源為國內或者自建的倉庫源;
Docker鏡像修改方法,vim /etc/docker/daemon.json,執行如下命令:
at>/etc/docker/daemon.json<<EOF { "registry-mirrors":["https://registry.docker-cn.com"] } EOF service docker restart
— 故障排錯案例6 —
案例描述:
啟動Docker容器,報錯信息如下:
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": executable file not found in $PATH".
如上報錯新,通常是由於容器啟動時,不支持該命令:/bin/bash。
解決方案:
解決方法有如下兩種:
修改啟動命令為正確的Docker容器啟動命令,例如修改為:/bin/sh或者sleep 99999d等;
Docker鏡像自身問題或者Docker引擎版本比較低導致,可以升級Docker引擎版本服務;
— 故障排錯案例7 —
案例描述:
Docker虛擬化運行中,報錯信息如下:
Docker no space left on device Docker no space left on device Docker no space left on device Docker no space left on device Docker no space left on device
如上錯誤,表示Docker虛擬化引擎平台,沒有多月的空間設備所使用,證明容器磁盤不足或者物理機磁盤不足。
解決方案:
手工刪除Docker容器占用數據比較大的目錄;
或者通過docker system prune自動刪除一些日志目錄,此種方法會停止所有容器;
或者臨時增加Docker存儲硬盤等;
— 故障排錯案例8 —
案例描述:
Docker push上傳鏡像至本地倉庫報錯信息如下:
The push refers to a repository [106.12.133.186:5000/busybox] Get https://106.12.133.186:5000/v1/_ping: http: server gave HTTP response to HTTPS client
根據如上錯誤提示,錯誤是由於客戶端采用https,docker registry未采用https服務所致。一種處理方式是把客戶對地址“106.12.133.186:5000”請求改為http。
解決方案:
vim /etc/docker/daemon.json 文件。
在文件中寫入:{ "insecure-registries":["106.12.133.186:5000"] } 。
保存退出后,重啟docker服務,問題即可解決。
— 故障排錯案例9 —
案例描述:
Error response from daemon: service endpoint with name xxx already ex
端口或服務已經被占用,目前試了網上的方法還沒解決,方法只能重啟了。