开发者工具 · Docker run 到 Docker compose 转换器
docker run 标志如何映射到 Compose 键:-p、-v、-e、--name 等
· 工作原理
泊坞窗 作曲 开发人员工作流程
大多数 docker run 标志都有一对一的 Compose 等效项,而少数则没有。这篇文章将逐步介绍映射,以便转换后的服务定义能够按预期读取。
docker run 在自述文件中包含三行 - 它有效,没有人可以审查它,并且团队想要一个 compose.yaml
多行 docker 运行现在可以启动服务,同时将其操作合同隐藏在 shell 别名或 README 中。 Compose 文件将相同的选择移至可审查的服务定义中,但转换必须考虑每个标志,而不是默默地删除安全设置。 ToolAcre 将命令解析为文本:它从不运行映像、打开 Docker 套接字或部署容器。将输出视为仍需要操作员检查主机路径、凭据和网络假设的草稿配置。
服务的形状 - 图像,然后是服务下的一组镜像标志的键:以及服务名称
Compose YAML 在 services: 下开始,后跟服务名称和图像:。与命令行不同,它的键将重复的值(例如端口和环境条目)分组到序列中。 ToolAcre 从 --name 或图像派生服务名称,并在序列化 YAML 之前构建模型。当前的 Compose 文件不需要顶级版本:key;添加一个是因为一篇较旧的博客文章显示它会创建一个过时的警告而不是提高兼容性。
常用标志 — -p 表示端口、-v 表示卷、-e 表示环境、--name 表示容器名称、--restart 表示重新启动、--network 表示网络
常见映射使文件可识别:-p 8080:80 变为端口:使用带引号的映射,-v host:container 变为卷条目,-e KEY=value 进入环境,--name 变为容器名称,--restart 变为重新启动,--network 需要网络上下文。引用端口映射很重要,因为 YAML 应该将其视为字符串,而不是将标点符号解释为另一种类型。命名卷可能需要自己的顶级卷声明;应根据将运行 Compose 的计算机检查主机绑定安装。
不太常见的标志 — --hostname、--user、--workdir、--entrypoint、--cap-add、--device、--label、--add-host 及其密钥
--hostname、--user、--workdir、--entrypoint、--cap-add、--device、--label 和 --add-host 等标志具有相应的服务概念,但它们的语义可能取决于运行时和主机。不受支持的 --security-opt 不得被发明为看似合理的密钥或被无形地丢弃。 ToolAcre 列出了命名不支持的选项的警告,以便审阅者可以手动完成映射或确定 Compose 不是正确的替代方案。 YAML 密钥的存在并不能证明服务以相同的权限启动。
位置参数 — 图像变为 image:,其后的任何内容都变为命令:
图像名称是运行及其选项之后的位置参数。镜像后面的参数成为服务命令,而不是更多的 Docker 运行标志;跨越该边界移动令牌会改变程序接收它的内容。将一个 README 示例拆分为标记时,Shell 引号和反斜杠也很重要。 ToolAcre 的解析器不是 shell 解释器,因此应该在上下文中审查诸如 $HOME 之类的变量,而不是假设它像在原始交互式 shell 中那样扩展。
工作示例:转换 Postgres docker run — 完整命令、生成的服务定义和逐行比较
考虑示例命令 docker run -d --name demo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=demo-only --restart except-stopped postgres:16。 ToolAcre 发出 services.demo-db ,其中包含镜像 postgres:16、container_name demo-db、带引号的 5432:5432 端口、pgdata 卷、环境列表条目、重新启动:unless-stopped 以及顶级 pgdata 卷声明。它警告 -d 是一个命令行选项; docker compose up -d 处理它。 “仅演示”是故意不安全的教学占位符 - 切勿将真实的数据库密码提交到此生成的 YAML 中。
这不包括什么 - 没有等效服务的标志(-d,--rm)以及根本不在命令中的东西,例如构建上下文
并非每个运行标志都有对应的持久服务属性。 -d 由您调用的 compose 命令处理; --rm 属于一次性撰写运行而不是长期运行的服务。无法推断原始命令中缺少的构建上下文、秘密存储、运行状况策略或多服务依赖项。该工具报告不受支持的标志,而不是假装其输出是完整的部署计划。在部署特权或网络敏感容器之前,请阅读 Docker Compose 服务参考。
要点:Compose 具有相同的配置和结构 — 并且转换器根据您粘贴的命令生成服务定义
Compose 是相同的配置,其结构是为了审查和可重复性。 Docker run 到 Docker compose 转换器会在浏览器中为您提供候选服务定义,并将粘贴的命令保留在本地;它不执行 Docker。将每个源标志与其 YAML 密钥进行比较,解决警告并从普通环境块中删除机密,然后再将结果应用到真实主机。