
簡介《銀河麒麟v10 sp1 server安裝docker手冊》是一份面向國產(chǎn)化環(huán)境運維人員與開發(fā)者的實操文檔專門解決麒麟服務器上因軟件源缺失、依賴不兼容而裝不上docker的問題。全部內(nèi)容集中在一個docx文檔共1個文件中壓縮包僅17KB篇幅精簡但步驟完整。文檔先指導配置yum源既加入阿里云docker-ce源又補充麒麟官方源用于安裝依賴包隨后依次演示安裝docker-ce-cli 18.09.7、安裝docker-ce、啟動docker服務并查看版本每個環(huán)節(jié)都給出了命令與輸出示例便于讀者對照執(zhí)行和驗證。同時文檔特別說明了無法通過yum直接安裝最新版docker的原因列出了container-selinux版本缺失的具體報錯并介紹了--skip-broken、--nobest等可嘗試參數(shù)為后續(xù)排錯提供了切入點。該資料已有7199人學習適合需要在銀河麒麟v10 sp1 server上快速搭建docker環(huán)境的技術人員參考使用。1. 銀河麒麟 v10 SP1 Server 裝 Docker先確認為什么只能停在 18.09.7在銀河麒麟 v10 SP1 Server 上裝 Docker很多人的第一反應是直接 yum install docker-ce但大概率會在依賴解析這一步翻車要么提示找不到包要么報 nothing provides container-selinux 這種玄學錯誤。手冊里穩(wěn)定跑通的方案是鎖定 docker-ce 18.09.7先配好雙源再安裝。這篇筆記把源配置、安裝步驟、報錯現(xiàn)場和安裝后的驗證全部拆開講適合剛接手麒麟服務器、要在上面跑容器服務的運維同學也適合排查“為什么新版 Docker 在麒麟上裝不動”這類問題。2. yum 源配置官方源缺 docker 包第三方源和麒麟源怎么分工銀河麒麟 v10 SP1 Server 的官方源里沒有 docker server 軟件包這一點手冊寫得很直接安裝只能借助第三方源。但第三方源只負責 docker-ce 本體docker-ce 啟動時依賴的底層組件仍然要從麒麟官方源獲取所以兩張 repo 文件都要配缺一張都會在依賴檢查階段報錯。很多人這里只配了一個源導致yum install docker-ce-cli時提示缺依賴包然后開始懷疑源地址沒用對。2.1 動手前先確認系統(tǒng)版本與架構(gòu)在寫任何 repo 文件之前先確認系統(tǒng)和 CPU 架構(gòu)。麒麟 v10 SP1 Server 的 aarch64 版本和 x86_64 版本的軟件包不通用docker-ce 倉庫的 baseurl 里寫了$basearchyum 會把它展開成實際架構(gòu)aarch64 就訪問.../aarch64/stablex86_64 就訪問.../x86_64/stable。跳過這一步直接復制網(wǎng)上的 x86_64 源配置后面幾乎一定會遇到 404 或找不到包。cat /etc/os-release uname -m輸出里重點看VERSION_ID是否為 10 SP1以及uname -m返回的是 aarch64 還是 x86_64。麒麟系統(tǒng)的 os-release 文件字段比 CentOS 多但VERSION_ID和PLATFORM_ID一眼就能看清主版本。架構(gòu)確認后后續(xù)所有源配置都以它為準不要照搬 CentOS 8 的倉庫路徑——麒麟雖然兼容 CentOS 生態(tài)但倉庫目錄結(jié)構(gòu)不完全一致。2.2 編寫 docker-ce.repo第三方源的關鍵參數(shù)拆解確認架構(gòu)沒問題后在 /etc/yum.repos.d 目錄下新建 docker-ce.repo。這里用的第三方源是 docker-ce 官方倉庫的國內(nèi)鏡像節(jié)點目錄結(jié)構(gòu)保持和 Docker 官方一致只是訪問路徑換成鏡像站的地址。手冊里給的這份 repo 文件可以直接落盤vim /etc/yum.repos.d/docker-ce.repo[docker-ce-stable] nameDocker CE Stable - 7 baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/docker-ce/linux/centos/gpg文件里的幾個參數(shù)各自管一件事。name只是倉庫顯示名yum repolist時會展示baseurl是真正取包的地址路徑里的centos/7表示這個倉庫是按 RHEL/CentOS 7 體系發(fā)布的麒麟 v10 兼容這一體系所以可以直接復用$basearch是動態(tài)變量yum 會自動替換為當前架構(gòu)enabled1表示啟用該倉庫gpgcheck1開啟 GPG 校驗gpgkey指向鏡像站同步下來的公鑰文件。注意gpgkey的路徑是鏡像站的不是 Docker 官方主站的不要手動改否則公鑰校驗會失敗。有同事問過為什么不直接配 Docker 官方倉庫而是繞到鏡像站。原因很直接在麒麟環(huán)境下直連官方倉庫大概率在網(wǎng)絡層就被卡住yum 會停在 downloading 階段直到超時。鏡像站至少在內(nèi)網(wǎng)可達性上穩(wěn)定得多這也是手冊選擇第三方源而不是官方源的原因。2.3 麒麟官方源的角色只負責依賴包第三方源負責 docker-ce 本體但它的依賴組件比如容器運行時、selinux 策略工具鏈等要從麒麟官方源拿。這里新建 kylin_aarch64.repo注意倉庫名ks10-os-media是固定的不要改改了 yum 可能識別不到vim /etc/yum.repos.d/kylin_aarch64.repo[ks10-os-media] name Kylin Linux Advanced Server 10 - Os baseurl http://archive.kylinos.cn/yum/v10/sp1-openstack-q/aarch64/os gpgcheck 0 enabled 1這份源里的gpgcheck0是手冊原文就有的意思是下載包時不檢查 GPG 簽名。對麒麟官方源來說內(nèi)網(wǎng)環(huán)境這么用是常態(tài)但從安全角度有隱患如果源地址被劫持或投毒yum 不會主動拒絕壞包。在內(nèi)網(wǎng)部署時我一般保留原樣但如果你對安全等級要求高建議先手動獲取公鑰并開啟gpgcheck1代價是每次更新要多維護一把公鑰。還有一個容易忽略的點baseurl指向的是sp1-openstack-q相對路徑它對應麒麟 v10 SP1 的一個 openstack 衍生源目錄。這個目錄里除了 openstack 相關包還維護了系統(tǒng)基礎組件docker 18.09.7 的依賴能在這里找到是因為這套源始終在跟隨 SP1 版本更新。不要用 v10 的通用源路徑替換它替換后依賴版本會錯位。2.4 源配完先驗證repolist 和 makecache兩個 repo 文件寫完先別急著裝包跑一遍 repolist 確認倉庫被識別再跑 makecache 生成緩存。這一步能過濾掉八成配置錯誤yum repolist yum makecache如果 repolist 里能看到docker-ce-stable和ks10-os-media兩個倉庫說明 yum 已經(jīng)正確讀到配置。如果只看到一個說明另一個 repo 文件語法有錯或路徑寫錯。常見情況是 docker-ce.repo 里 baseurl 行多了空格或者 kylin_aarch64.repo 的gpgcheck被誤寫成gpgcheck1導致校驗失敗——雖然公鑰沖突在麒麟源上很少見但一旦出現(xiàn)yum 會拒絕整個倉庫。makecache 過程中如果報 404先檢查$basearch是不是被錯誤地寫成了硬編碼架構(gòu)如果報連接失敗用 curl 訪問一下 baseurl 地址確認網(wǎng)絡通不通。這一步排查完源配置才算真正結(jié)束進入安裝環(huán)節(jié)。3. 用 yum 鎖定 18.09.7先 cli 后 ce四步裝完再驗證源配好之后安裝環(huán)節(jié)比想象中容易翻車尤其是版本鎖定和依賴順序。手冊把安裝拆成兩步先裝docker-ce-cli-18.09.7-3.el7再裝docker-ce-18.09.7-3.el7。這個順序不是隨意寫的而是麒麟源環(huán)境下驗證過的最穩(wěn)路徑。3.1 為什么先裝 docker-ce-cli 而不是直接裝 docker-ce常規(guī)動作是直接yum install docker-ce但在麒麟 v10 SP1 Server 上直接這么做yum 的依賴解析器可能會挑到版本更新但依賴沖突的候選包。先鎖定 cli 包讓它落盤相當于先把 docker 命令行工具固定下來再回頭裝 daemon 本體。兩步走看起來多敲一條命令實際上避開了 yum 自動選擇時把 cli 和 daemon 版本拉成不一致的隱患。實際踩過這樣一個坑yum 自動解析時選了 cli 20.x 和 daemon 18.09.7 的混搭組合安裝完成后docker version里 Client 和 Server 版本對不上排查起來非常繞。手動鎖版本分兩步走從根上避開這個問題。3.2 安裝命令與預期輸出現(xiàn)在執(zhí)行安裝。兩條命令都要帶完整版本號不要省略-3.el7后綴yum install docker-ce-cli-18.09.7-3.el7 yum install docker-ce-18.09.7-3.el7第一條命令執(zhí)行時yum 會解析 cli 包的依賴通常包括 rootless-extras、containerd 相關組件前提是麒麟官方源配置正確且 makecache 剛跑過。執(zhí)行期間會有一次確認提示輸入 y 回車即可。第二條命令安裝 daemon 本體會連帶拉取容器運行時組件安裝完成后輸出里會出現(xiàn)Installed: docker-ce的提示。如果第二條命令也報nothing provides container-selinux先停止安裝回到第 2 章檢查麒麟源是否啟用。這個報錯本質(zhì)上是新版 docker 的依賴要求18.09.7 并不強制那么高版本的 container-selinux。出現(xiàn)這個報錯說明版本鎖得不夠死yum 解析時又往新版跑了。3.3 啟動 docker 并確認版本安裝完成之后啟動服務并驗證版本systemctl start docker docker --version預期輸出是Docker version 18.09.7, build 2d0083d。systemctl start在麒麟上使用 systemd 標準 unit 文件啟動過程會拉起 dockerd 守護進程并創(chuàng)建 /var/run/docker.sock socket 文件。docker --version輸出版本號只證明客戶端二進制能跑不代表守護進程工作正常所以還要做下一步檢查。3.4 確認服務和 socket 狀態(tài)這一步容易被跳過但恰恰是出問題最多的地方。執(zhí)行下面兩條命令systemctl status docker ls -l /var/run/docker.socksystemctl status輸出里Active狀態(tài)必須是active (running)如果顯示failed或者active (exited)說明 dockerd 啟動后立即退出了原因通常是存儲驅(qū)動不兼容或 selinux 策略攔截這在第 4 章專門排查。socket 文件存在說明客戶端和守護進程之間的通信通道已建立ls -l能看到文件類型是s也就是 socket 類型不是普通文件。確認這兩點后Docker 才算真正進入可用狀態(tài)。4. 安裝過程常見問題與避坑四條現(xiàn)場報錯解決記錄源配置和安裝步驟是直線流程但實際執(zhí)行時問題都出在細節(jié)上。這一章把手冊里提到的報錯和我自己踩過的坑整理成四條記錄每條按現(xiàn)象、原因、解決三個部分寫方便對號入座直接處理。4.1 安裝新版 docker-ce 報 nothing provides container-selinux現(xiàn)象執(zhí)行yum install docker-ce不帶版本號yum 解析到最后輸出nothing provides container-selinux 2:2.74 needed by docker-ce-3:20.10.17-3.el7.aarch64安裝中斷。這個報錯手冊里也提到了屬于最典型的新版依賴問題。原因20.10.17 這個新版 docker-ce 依賴高版本的 container-selinux而麒麟 v10 SP1 官方源里該組件版本停留在更低版本無法滿足這個約束。yum 在安裝階段就拒絕繼續(xù)因為它無法找到合法的依賴組合。注意這里報錯的包名是docker-ce-3:20.10.17-3.el7.aarch643:是 epoch 號aarch64 是架構(gòu)都說明 yum 解析到的是最新候選包。解決不要在麒麟系統(tǒng)上硬裝最新版 docker直接把版本鎖定到 18.09.7-3.el7。18.09.7 的依賴條件比 20.10.17 寬松很多麒麟源能完整滿足。執(zhí)行時兩條命令都帶完整版本號不要偷懶寫docker-ce-18.09.7寫完用yum info docker-ce-18.09.7-3.el7確認倉庫里存在這個具體版本再裝。4.2 源配置了卻提示 No package docker-ce available現(xiàn)象兩個 repo 文件都建好了執(zhí)行yum install docker-ce-cli-18.09.7-3.el7卻提示沒有可用軟件包甚至yum search docker搜不到任何 docker 相關包。原因最常見的是 docker-ce.repo 的enabled參數(shù)被寫成enabled0或者文件名后綴不是.repo導致 yum 不讀取。另一類是 baseurl 中的$basearch在編輯時被手動替換成了空字符串或錯誤架構(gòu)倉庫訪問 404 后 yum 自動丟棄該倉庫。解決先執(zhí)行yum repolist all查看倉庫是否在列表里再看docker-ce-stable的啟用狀態(tài)是不是 disabled。確認文件后綴為.repo用cat -A檢查 repo 文件里是否有不可見控制字符。$basearch保持變量形式不要手動替換yum 會自動展開。4.3 加 --nobest 硬闖新版依賴裝了等于白裝現(xiàn)象有人嘗試用yum install docker-ce --nobest跳過依賴校驗安裝 20.10.17安裝命令走完了但運行容器時直接失敗docker run hello-world拉取鏡像成功卻起不來容器。原因--nobest會容忍依賴不滿足繼續(xù)安裝但缺失的 container-selinux 并不會因為安裝成功就自動出現(xiàn)。dockerd 啟動時讀取系統(tǒng)安全策略失敗容器創(chuàng)建被阻斷表現(xiàn)為鏡像拉下來了但 run 階段報錯退出。解決刪除已安裝的 docker 包命令是yum remove docker-ce docker-ce-cli然后回到第 3 章按鎖定版本步驟重裝。這個場景沒有后悔藥如果在生產(chǎn)環(huán)境執(zhí)行了--nobest務必先把 docker 相關包全部清理干凈再重裝不要直接在舊包上疊加安裝。4.4 systemctl start docker 啟動失敗journal 里沒有明顯報錯現(xiàn)象systemctl start docker執(zhí)行后狀態(tài)顯示 failedjournalctl日志里只看到 overlay2 相關關鍵字沒有明確的 error 信息。這種情況最讓人頭疼因為報錯不指向具體組件。原因麒麟內(nèi)核默認支持 overlay2但部分內(nèi)核補丁或安全模塊會和 overlay2 存儲驅(qū)動沖突導致 dockerd 初始化存儲驅(qū)動失敗。這是麒麟上裝 Docker 最隱蔽的坑之一報錯信息不直接容易被誤判成 selinux 問題。解決先執(zhí)行journalctl -xe拉取完整日志確認關鍵字是 overlay2 還是 selinux如果是 overlay2在 /etc/docker/daemon.json 中顯式指定存儲驅(qū)動為 vfs 先跑通業(yè)務之后升級內(nèi)核到麒麟官方維護的版本再切回 overlay2。如果是 selinux 攔截根據(jù)你們的安全策略決定是否放行 docker 相關進程不建議無腦關閉 selinux。5. 裝完不代表能用鏡像加速、hello-world 與開機自啟docker 裝好只是第一步真正能跑起來還要做三件事配置鏡像加速、驗證完整容器鏈路、設置開機自啟。鏡像加速解決拉取超時hello-world 驗證鏈路貫通開機自啟避免服務器重啟后 docker 不在了。這三件事做完安裝才真正收口。5.1 配置鏡像加速daemon.json 的寫法與參數(shù)docker 默認從 Docker Hub 拉鏡像這個行為在麒麟服務器所在的網(wǎng)絡環(huán)境里經(jīng)常超時。配置鏡像加速是安裝后的第一件事原理是讓 dockerd 拉鏡像時優(yōu)先訪問可達的鏡像倉庫緩存節(jié)點。修改 /etc/docker/daemon.jsonvim /etc/docker/daemon.json{ registry-mirrors: [https://your-internal-registry.example.com] }registry-mirrors是數(shù)組可以配多個地址dockerd 拉鏡像時會依次嘗試。這里給的是占位地址實際部署時填你們內(nèi)網(wǎng)搭建的鏡像倉庫地址或者團隊統(tǒng)一維護的加速節(jié)點。改完配置必須重啟才會生效systemctl daemon-reload systemctl restart docker注意 daemon.json 必須是合法 JSON很多人在這里翻車行尾少逗號或引號用了中文全角dockerd 直接拒絕解析并報錯。校驗可以用python3 -m json.tool /etc/docker/daemon.json輸出沒有異常再重啟。重啟后再用docker info確認 registry-mirrors 配置已生效。5.2 用 hello-world 驗證一條完整鏈路鏡像加速配好后跑一遍 hello-world 驗證 docker 的拉取、創(chuàng)建、執(zhí)行全鏈路docker run hello-world首次執(zhí)行會先從配置的 mirror 地址查找 hello-world 鏡像沒有命中會回源拉取輸出里出現(xiàn)Hello from Docker!說明整個鏈路是通的。如果卡在unable to find image或dial tcp超時先檢查內(nèi)網(wǎng)能否訪問鏡像倉庫地址再查 DNS 配置。這一步和 yum 源是兩套網(wǎng)絡路徑經(jīng)常出現(xiàn) yum 能裝包但 docker 拉不到鏡像的情況不要混為一談。5.3 設置開機自啟與日常管理命令服務器重啟后想讓 docker 自動拉起執(zhí)行systemctl enable docker日常用得最多的管理命令按使用頻次列一張簡表命令用途docker ps查看運行中的容器加 -a 看全部容器docker images查看本地鏡像列表docker logs 容器名/ID查看容器日志docker inspect 容器名/ID查看容器或鏡像的詳細配置其中docker inspect最容易被低估容器的掛載點、網(wǎng)絡模式、entrypoint 都能通過它看到結(jié)構(gòu)化信息排查詭異問題時基本靠它。docker ps加-a能看到已退出容器的狀態(tài)碼這個狀態(tài)碼對判斷容器為什么掛掉非常關鍵。6. 備用方案與體檢離線 rpm 應急安裝和 docker info 檢查yum 源依賴外部網(wǎng)絡內(nèi)網(wǎng)環(huán)境或鏡像站故障時安裝會直接卡住。提前把 rpm 包下載到一個目錄離線安裝是最后的兜底方案。需要準備的包主要是 docker-ce、docker-ce-cli 以及配套的 containerd.io下載時用和 18.09.7 配套的版本不要混搭更高版本。yum install --downloadonly --downloaddir/data/docker-rpm docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7-3.el7離線機器上執(zhí)行安裝時依賴檢查由 rpm 自己完成文件缺失會直接報error: Failed dependencies缺哪個包就看哪一行然后從另一臺相同架構(gòu)的機器上拷對應 rpm 過去。注意--downloadonly需要 yum-plugin-downloadonly 插件有些麒麟環(huán)境沒默認安裝裝不上就先yum install yum-plugin-downloadonly。安裝完成后用docker info做一次標準體檢重點看兩行docker info | grep -E Storage Driver|Cgroup DriverStorage Driver應該顯示 overlay2如果顯示 vfs 說明之前踩過存儲驅(qū)動坑容器性能會明顯下降只能做臨時應急Cgroup Driver應該顯示 systemd如果不是 systemd容器資源限制會和 systemd 管理沖突跑復雜編排時會出現(xiàn)奇怪問題。這兩項都正常再跑一次 hello-world 和systemctl status docker才算真正收工。那次在生成環(huán)境上直接裝了最新版 docker-ce結(jié)果依賴解析全亂最后只能清包重裝整個晚上都在折騰 rpm 依賴。從那以后我每次裝完都強制走一遍docker info加 hello-world 雙驗證缺一個都不放心。這個習慣幫我提前發(fā)現(xiàn)了很多隱患希望幫到你。本文還有配套的精品資源點擊獲取