Sublime Text是Ansible Playbook的开发编辑工具,非运行时依赖;它通过Ansible-YAML插件提供语法识别、高亮、补全及项目导航支持,但容器交付必须由ansible-playbook命令执行,且需正确配置docker_host路径、安装community.docker集合并完成语法检查等步骤。

Sublime Text 本身不参与容器环境交付,它只是个编辑器;真正负责一键交付的是 Ansible Playbook。把 Sublime Text 和容器交付硬凑在一起,容易误判职责边界——你编辑的 playbook.yml 在 Sublime Text 里写得再漂亮,不执行 ansible-playbook 命令,容器镜像不会自己 build,服务也不会自动 up。
Sublime Text 能为 Ansible Playbook 编写提供什么实际支持
它不是运行时依赖,而是开发体验层工具。关键在于能否高效、准确地写出符合 Ansible 语义的 YAML:
- 装
Ansible插件(如Ansible-YAML)后,能识别tasks、handlers、vars等关键字,避免缩进错位导致yaml.scanner.ScannerError - 启用
YAML语法高亮 + 自动补全后,loop、when、block这类结构写起来不容易漏掉冒号或破折号 - 配合
Project功能,把inventory/、roles/、group_vars/放进同一项目根目录,跳转变量定义(比如{{ docker_image_tag }})比用 Finder 手动翻快得多 - 别开多个未保存的临时 tab 写
docker_container模块参数——改到一半切去查文档,回来容易粘贴错位置,直接覆盖掉network_mode字段
容器交付 Playbook 必须包含的三个核心模块调用
常见错误是只写 docker_image 就以为完事了,结果容器起不来。真实交付链至少要串起三步:
-
docker_image:拉取或构建镜像,注意source: pull或source: build必须显式声明,缺省值在不同 Ansible 版本中不一致(2.14+ 默认pull,2.12 默认present) -
docker_network:如果容器要跨宿主通信,driver: overlay必须提前创建网络,不能指望docker_container自动 fallback -
docker_container:最关键的字段是state: started和restart_policy: unless-stopped,漏掉后者,宿主机 reboot 后容器就静默退出了
示例片段(非完整 playbook):
- name: Pull and run nginx container
docker_container:
name: webapp
image: nginx:alpine
state: started
restart_policy: unless-stopped
ports:
- "8080:80"
networks:
- name: mynet
ipv4_address: 172.20.0.10为什么 Sublime Text 里写的 playbook 在 macOS 上跑不通
不是编辑器的问题,是 macOS 本地执行容器操作的权限和路径陷阱:
-
dockerCLI 在 macOS 上默认走 Docker Desktop 的 socket(/var/run/docker.sock),但 Ansible 默认用local连接插件,会尝试直连该路径——而 Docker Desktop 实际映射的是/Users/<user>/Library/Containers/com.docker.docker/Data/docker.sock - 解决方案不是改 Sublime Text 设置,而是改
ansible.cfg:加一行remote_tmp = /tmp(避免权限拒绝),并在 playbook 的vars里显式设docker_host: unix:///Users/xxx/Library/Containers/com.docker.docker/Data/docker.sock - macOS 上用
community.docker集合前,必须先ansible-galaxy collection install community.docker,这个命令在 Sublime Text 里敲不出来,得切终端执行 - 别在 Sublime Text 内置终端里跑
ansible-playbook——它的 shell 环境常不加载~/.zshrc,导致PATH里没有docker或ansible
真正卡住交付进度的,往往不是语法写错,而是没意识到 docker_container 模块在 macOS 上默认不可用,或者以为 Sublime Text 装了插件就能替代 ansible-lint 做静态检查。写完 playbook 后,先 ansible-playbook --syntax-check,再 --list-tasks,最后才 --check,这三步漏任何一环,都可能让容器在生产环境里挂五分钟才报错。


















