阿里云Docker安裝全攻略:5大高效部署方案與避坑指南
{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"], "live-restore": true, "log-driver": "json-file" }
2.1 容器網(wǎng)絡(luò)連接故障排查指南
遇到容器無(wú)法訪問(wèn)外網(wǎng)的情況,先執(zhí)行docker network inspect bridge查看默認(rèn)網(wǎng)橋配置。阿里云ECS默認(rèn)安全組策略可能攔截了容器流量,需在控制臺(tái)放行特定端口的同時(shí),確認(rèn)未啟用source/destination check選項(xiàng)。當(dāng)多個(gè)容器綁定宿主機(jī)相同端口時(shí),netstat -tulnp | grep 80這類命令能快速定位端口沖突。
跨主機(jī)通信異常往往與overlay網(wǎng)絡(luò)驅(qū)動(dòng)有關(guān),檢查docker info輸出的Swarm狀態(tài)是否誤開(kāi)啟。在VPC環(huán)境下配置自定義路由表時(shí),確保目標(biāo)網(wǎng)段包含容器子網(wǎng)(默認(rèn)172.17.0.0/16)。使用tcpdump抓包分析容器網(wǎng)卡流量,比如tcpdump -i docker0 port 53能觀察DNS解析是否正常。
2.2 鏡像拉取失敗解決方案匯總
鏡像拉取超時(shí)先執(zhí)行docker info | grep Mirrors確認(rèn)加速器生效狀態(tài)。阿里云ACR私有鏡像出現(xiàn)denied請(qǐng)求時(shí),需要docker login registry.cn-hangzhou.aliyuncs.com完成認(rèn)證。遇到manifest找不到的錯(cuò)誤,嘗試指定精確標(biāo)簽代替latest,例如mysql:8.0.32。
磁盤(pán)空間不足導(dǎo)致的拉取中斷容易被忽視,df -h /var/lib/docker查看存儲(chǔ)目錄使用率。清理懸空鏡像用docker image prune -a --filter "until=24h"保留最近一天的數(shù)據(jù)。海外鏡像源訪問(wèn)困難時(shí),可在阿里云國(guó)際版機(jī)器上配置代理中轉(zhuǎn)。
2.3 存儲(chǔ)驅(qū)動(dòng)沖突處理方案
執(zhí)行docker info | grep Storage確認(rèn)當(dāng)前驅(qū)動(dòng)類型,xfs文件系統(tǒng)需要增加ftype=1掛載參數(shù)才能支持overlay2。遷移存儲(chǔ)驅(qū)動(dòng)前務(wù)必備份/var/lib/docker目錄,修改/etc/docker/daemon.json添加"storage-driver": "overlay2"后,重啟服務(wù)可能導(dǎo)致已有鏡像不可用。
遇到Device is busy報(bào)錯(cuò)時(shí),lsof +D /var/lib/docker找出占用文件的進(jìn)程。ext4文件系統(tǒng)建議啟用dir_index特性提升性能,執(zhí)行tune2fs -O dir_index /dev/vdb后需要完整fsck檢查??缥募到y(tǒng)存儲(chǔ)池配置,可考慮將docker根目錄掛載到獨(dú)立云盤(pán)。
2.4 服務(wù)啟動(dòng)報(bào)錯(cuò)深度分析
systemctl status docker -l顯示退出碼139時(shí),往往是內(nèi)核模塊缺失導(dǎo)致,modprobe overlay加載必要模塊。日志中出現(xiàn)failed to start daemon: Error initializing network controller的情況,需要?jiǎng)h除/var/lib/docker/network/files并重啟服務(wù)。
內(nèi)存不足引發(fā)OOM killer終止進(jìn)程時(shí),dmesg | grep docker查看系統(tǒng)日志記錄。升級(jí)內(nèi)核后出現(xiàn)cgroup兼容性問(wèn)題,在grub配置中添加cgroup.memory=nokmem參數(shù)可臨時(shí)規(guī)避。針對(duì)docker.socket激活失敗,重裝docker-ce包有時(shí)比手動(dòng)修復(fù)更高效。
2.5 權(quán)限管理最佳實(shí)踐(含sudo權(quán)限配置)
將普通用戶加入docker組的風(fēng)險(xiǎn)在于賦予其潛在root權(quán)限,更好的方案是配置sudo規(guī)則。在/etc/sudoers.d/docker文件中添加user ALL=(root) /usr/bin/docker run,/usr/bin/docker exec限制可用命令。采用授權(quán)插件如casbin實(shí)現(xiàn)RBAC控制,對(duì)接阿里云RAM進(jìn)行權(quán)限同步。
容器內(nèi)進(jìn)程避免使用root用戶運(yùn)行,Dockerfile中應(yīng)指定USER 1000。敏感目錄掛載時(shí)添加:ro只讀后綴,防止容器內(nèi)惡意篡改。定期審計(jì)docker組成員,aliyun ecs DescribeInstances接口可批量檢查服務(wù)器用戶配置。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由皇冠云發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。