繁體中文

開發者工具 · Docker run 到 Docker compose 轉換器

引號、換行符號與 $VARS:正確解析 docker run 指令

· 工作原理

碼頭工人 命令列 引用

說明引號、換行符號和 $vars 的抽象圖:正確解析 docker run 指令
原始 ToolAcre 向量圖

docker run 指令是在 Docker 看到它之前的 shell 輸入。這篇文章解釋了引用和行延續如何改變標記的內容,以及為什麼沒有轉換器可以擴展您的 shell 變數。

轉換器收到一個文字 $HOME - 該命令在您的終端中執行,因為 shell 在 docker 執行之前擴展了它

轉換器收到一個文字 $HOME - 該命令在您的終端中執行,因為 shell 在 docker 執行之前擴展了它。證據:$HOME 仍然是文字,因為標記器不執行擴展。使用一次性文字重現 shell 標記化。將每個來源出現與引號的標記和延續配對;保留擴充功能和 Windows 解析以供目標檢視。

引用事件也揭示了一個單獨的引用事件邊界是單引號是文字,雙引號處理記錄的轉義。證據:單引號是文字,雙引號處理記錄的轉義。這個 shell 標記化約束是一個停止點。檢查沒有製造行為的引用標記和延續,然後記錄擴充和 Windows 解析的主機檢查。

此標記器類似於選定的 POSIX shell 字規則,但不執行變數或命令擴展

首先是 Shell,其次是 Docker — Docker 接收的令牌是 shell 引用、分割和擴充的結果。證據:選定的類似 POSIX 的單字規則是在不成為 shell 的情況下實現的;此標記器類似於選定的 POSIX shell 字規則,但不執行變數或命令擴展。將 shell 標記化標記追蹤為引用標記和延續。將有序值與最後值欄位分開;擴充功能和Windows解析是外部集合。

相關的引用機制邊界是,對於該引用部分,在該候選檔案旁邊保留該引用部分命令的原始內容和該引用部分的警告。證據:儲存庫沒有提供更廣泛的執行時間或歷史證據。使用這個 shell 標記化事實來預測引號的標記和延續中的一個成員或標量。在決定有關擴充功能和 Windows 解析的任何事情之前檢查警告。

反斜線換行延續 — 為什麼尾部反斜線是 shell 功能,並在中斷指令後面是一個雜散空格

反斜線換行延續 — 為什麼尾部反斜線是 shell 功能,並在中斷指令後面是一個雜散空格。證據:反斜線換行符消失,而終端單獨的反斜線失敗。從其模型判斷 shell 標記化序列化。在引號的標記和延續中引用可以保護類型,但不提供擴充和 Windows 解析的操作證明。

第二個引用序列化觀察值是一個單獨的引用輸出邊界,即 wiki 樣本可以被規範化並檢查其文字標記。證據:維基樣本可以被規範化並檢查其文字標記。此 shell 標記化輸出將設定與不可用的上下文分開。保持引用的標記和延續可審查,並獨立檢查擴充功能和 Windows 解析。

值中的單引號、雙引號與空格 — -e MSG='hello world' 與 -e MSG=hello world

值中的單引號、雙引號和空格 — -e MSG='hello world' 與 -e MSG=hello world。在 shell 標記化異常處停止而不是猜測。引用標記和延續附近的任何新增都需要與擴充功能和 Windows 解析相關的特定部署的原因。

另一個引用異常約束是,單獨的引用異常邊界是 Docker 選項數量遵循標記化且不存在 Windows 規則。證據:Docker 選項數量遵循標記化,且不存在 Windows 規則。將原始 shell 標記化指令保留在警告旁邊。此比較顯示了引用的標記和延續包含哪些內容以及哪些擴充功能和 Windows 解析決策仍然是手動的。

美元表達式、子 shell 語法和波形符號仍保持原義,因為轉換器不是 shell

變數和子 shell — $PWD、$(id -u) 和 ~ 由您的 shell 擴展,因此轉換器會按字面意思看到它們。證據:子 shell 符號反引號美元變數和波形符號從未被評估;美元表達式、子 shell 語法和波形符號仍保持原義,因為轉換器不是 shell。從合成名稱建立 shell 標記化範例。使每個引用的令牌和延續項都可追踪,而不會暴露生產擴展和 Windows 解析詳細資訊。

相同的引用範例範例表明,對於此引用部分,請在此候選檔案旁邊保留此引用部分命令的原始內容和此引用部分的警告。成對的 shell 標記化事實應該在引號的標記和延續中可見。記錄該行並避免有關擴展和 Windows 解析的假設。

工作範例:清理 wiki 貼上的命令 - 在轉換之前規範化延續和引用,然後檢查 YAML

工作範例:清理 wiki 貼上的命令 - 在轉換之前規範化延續和引用,然後檢查 YAML。將 shell 標記化結果轉換為一個可觀察的引用標記和延續差異。 Docker 擁有後來的擴充功能和 Windows 解析判決。

引用結果實作也顯示了一個單獨的引用效果邊界是 $HOME 保留文字,因為標記器不執行擴充。分割 shell 標記化職責:轉換寫入參考的標記和延續,儲存庫刪除機密,操作員驗證擴充和 Windows 解析。

Windows shell 參考和完整的 POSIX 擴充功能都在此解析器之外

這不包括什麼 - docker run 自己的選項解析怪癖,例如 = 與空格,以及 Windows shell 引用差異。證據:Docker 選項數量遵循標記化,而 Windows 規則不存在; Windows shell 參考和完整的 POSIX 擴充功能都在此解析器之外。將 shell 標記化範圍限制為此處顯示的引號的標記和延續分支。相鄰的表單和預設值無法回答擴充功能和 Windows 解析問題。

保留此引用部分的原始命令以及此候選檔案旁邊的警告後,又出現了一個引用範圍限制。將此 shell 標記化邊界視為排除項。更喜歡準確的引用標記和延續,而不是對擴展和 Windows 解析的猜測。

重點:為轉換器提供 Docker 會看到的內容,並用文字值或 Compose ${VAR} 插值取代 shell 變數

重點:為轉換器提供 Docker 會看到的內容,並用文字值或 Compose ${VAR} 插值取代 shell 變數。證據:可靠的輸入意味著提供用於解析的文字單字。將 shell 標記化審核為來源選項、模型欄位、引用標記和延續行以及警告。在檢查擴充功能和 Windows 解析之前刪除機密。

最後,引用外送來源確認了一個單獨的引用決策邊界是反斜線換行符消失,而終端單獨的反斜線失敗。狹義地關閉 shell 標記化:引用標記和延續是候選者;不保證擴展以及 Windows 解析和 shell 等效性。