dsh-dockerfile-lint:DSH 下的 Dockerfile 靜態啓發式檢查

前言

在 DSH 裏讓智能體改 Dockerfile 時,常見問題是:基礎鏡像仍用 latest、默認 root、遠程拉腳本或 ADD 外鏈、把密鑰寫進 ARG/ENV,以及缺少 .dockerignore。這些問題不一定會在構建階段立刻暴露,但會抬高運維與安全成本。完整鏡像掃描或構建流水線往往更重;若只需要在提交前或對話裏快速掃一遍 Dockerfile 文本,靜態規則檢查更合適。下面介紹社區插件 dsh-dockerfile-lint(維護者 lengrufeng2008,目錄分類 admin-security),它面向 DeepSeek Harness,用一組固定啓發式規則做靜態檢查,不啓動 Docker、不讀鏡像層。

這是什麼

dsh-dockerfile-lint 是一個體量較小的獨立靜態檢查器(MIT 許可證,當前版本 v0.1.0)。倉庫地址:https://github.com/lengrufeng2008/dsh-dockerfile-lint。社區目錄頁:https://www.skillhub.cn/plugins/lengrufeng2008/dsh-dockerfile-lint。SkillHub 上的 Plugin 廣場與 DeepSeek / 幻方無官方從屬關係,DSH 生態本身是「一切皆插件」的思路,安裝來源以目錄頁與倉庫 README 爲準。

插件定位是「Fast static Dockerfile heuristics」,覆蓋 README 中列出的方向:基礎鏡像 tag、root 用戶、sudo、遠程 shell、apt 使用習慣、遠程 ADD、類似密鑰的 build args、缺失 .dockerignore 等(與 package.json 描述一致)。它解決的是「在改完 Dockerfile 後立刻得到可讀告警」,而不是替代安全審計或鏡像掃描。

核心功能

檢查在本地解析 Dockerfile 文本完成,規則集 deliberately 較小。README 與 package.json 中可覈對的能力包括:

  • 基礎鏡像 tag 相關啓發式(例如避免不可預期的浮動 tag 習慣)。
  • 以 root 運行、sudo 等與權限相關的寫法。
  • 遠程 shell、遠程 ADD 等從網絡拉取內容的指令模式。
  • apt 使用衛生(緩存、清理等常見最佳實踐方向)。
  • 疑似密鑰的 build arguments / 環境變量寫法。
  • 項目缺少 .dockerignore 時的提示。

輸出可以是面向人類的終端結果,也可以是 JSON,便於在腳本或智能體流程裏消費。插件在 DSH 側通過工具名 dockerfile_lint 暴露能力(見下文用法)。

安裝與啓用

運行環境要求 Node.js >= 20(見倉庫 package.json 的 engines 字段)。

在 DSH 中安裝

SkillHub 目錄頁提供的做法是:向 DeepSeek Harness 發送安裝請求,由 Harness 讀取後端安裝計劃後執行。可在目錄頁複製安裝提示詞,大意如下(以目錄頁原文爲準):

請安裝 DSH 插件 lengrufeng2008/dsh-dockerfile-lint。先讀取..

安裝前應自行瀏覽 GitHub 倉庫源碼與 MIT 許可證;插件以當前 DSH 進程權限運行,只安裝你信任的來源。

獨立 CLI(不經過 DSH 對話)

倉庫自帶可執行入口,適合本地或 CI 裏直接跑(無需 git clone 以外的假設:你需要已有該 npm 包或解壓後的源碼樹):

node bin/dsh-dockerfile-lint.mjs Dockerfile
node bin/dsh-dockerfile-lint.mjs Dockerfile --json

典型用法

命令行

對單個 Dockerfile 路徑執行檢查;加 --json 時輸出結構化結果,便於後續解析。

node bin/dsh-dockerfile-lint.mjs Dockerfile
node bin/dsh-dockerfile-lint.mjs Dockerfile --json

在 DSH 對話中

README 說明:

Use dockerfile_lint with the Dockerfile path.

即讓智能體調用 dockerfile_lint,並傳入 Dockerfile 路徑。經過上面的步驟安裝插件後,在編寫或審查容器鏡像定義時,可把該工具作爲對話內的一步靜態檢查。

開發與自測

維護者在倉庫中使用 Node 內置測試運行器:

npm test

對應腳本爲 node --test test/*.test.mjs。

適用場景與注意

適合誰

  • 在 DSH 裏頻繁讓模型生成或修改 Dockerfile 的開發者,希望在合併或構建前多一層輕量告警。
  • 需要在流水線或本地腳本里對 Dockerfile 做快速靜態掃視、且能接受啓發式誤報/漏報的團隊。

務必知道的限制

README 的 Limits 寫得很明確,正文應一併遵守:

  • 僅有靜態啓發式,不是安全審計、鏡像掃描或構建測試。
  • 規則集小,可能出現 false positive / false negative。
  • 不運行 Docker,也不檢查鏡像層。

因此:告警應作爲改 Dockerfile 的參考,不能當作「已通過安全認證」的結論。分類在目錄上爲 admin-security,指的是檢查主題偏向管理與安全習慣,而非全面合規掃描。

權限與信任

與所有 DSH 插件一樣,啓用前請閱讀 plugin/ 與 src/ 下的實現;安裝與調用發生在本機 DSH 環境中,權限等同於當前 Harness 進程。

結尾

dsh-dockerfile-lint 把 Dockerfile 上常見風險寫法收成一小組靜態規則,在 DSH 裏用 dockerfile_lint、在倉庫外可用 bin/dsh-dockerfile-lint.mjs,適合作爲改鏡像定義時的第一道輕量檢查。需要安裝說明與版本信息時,見 SkillHub 目錄頁 lengrufeng2008/dsh-dockerfile-lint 與 GitHub 倉庫 dsh-dockerfile-lint。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜