开发者工具 · Docker run 到 Docker compose 转换器
引号、换行符和 $VARS:正确解析 docker run 命令
· 工作原理
码头工人 命令行 引用
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 等效性。