You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2实例cloud-init脚本异常:Docker安装失败及脚本未执行

问题解决:EC2 cloud-init脚本未安装Docker且自定义脚本未执行

问题根源分析

从日志里的关键错误就能定位问题:

  • amazon-linux-extras: command not found:你的EC2实例是Amazon Linux 2023 (AL2023),这个系统已经移除了amazon-linux-extras工具,Docker现在直接在默认软件仓库里,不需要通过extras渠道安装。
  • 后续的Docker服务找不到、用户组不存在,都是Docker安装失败引发的连锁错误。
  • 自定义脚本放在per-boot目录,这个目录的脚本是每次系统启动时执行,不是初始化阶段执行,所以初始化过程中看不到它的输出。

修复后的cloud-init脚本

替换成适配AL2023的版本,同时调整脚本执行时机:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
runcmd:
 - dnf update -y
 - dnf install docker -y
 - systemctl start docker
 - usermod -a -G docker ec2-user
 - systemctl enable docker
 - dnf install cronie cronie-anacron -y

# 确保scripts-user模块在初始化阶段执行
cloud_final_modules:
 - [scripts-user, always]

write_files:
# 初始化阶段执行的脚本放在scripts-user目录
- path: /var/lib/cloud/scripts/user/myInitScript.sh
  permissions: "0755"
  content: |
    #!/bin/bash
    echo "Hello World.  The time is now $(date -R)!" >> /home/ec2-user/out.txt

# 保留开机执行的脚本(如果需要每次启动都跑)
- path: /var/lib/cloud/scripts/per-boot/myBootScript.sh
  permissions: "0755"
  content: |
    #!/bin/bash
    echo "Booted at $(date -R)!" >> /home/ec2-user/boot_log.txt
    
--//--

关键修改点说明

  1. Docker安装适配AL2023:

    • 把yum换成dnf(AL2023默认包管理器,yum是软链接,用dnf更规范)
    • 移除amazon-linux-extras install docker,直接用dnf install docker -y
    • 用systemctl enable docker替代chkconfig docker on(AL2023用systemd管理服务)
  2. 自定义脚本执行时机调整:

    • 要在初始化阶段执行,就把脚本放在/var/lib/cloud/scripts/user/目录,这个目录的脚本会在cloud-init的scripts-user模块阶段执行(对应配置里的cloud_final_modules设置)
    • 如果需要每次开机都执行,保留per-boot目录的脚本,但初始化阶段不会触发,得重启后才能看到输出
  3. 路径修正:

    • 脚本里的$HOME在cloud-init执行时指向/root,如果要写到ec2-user的目录,直接用绝对路径/home/ec2-user/out.txt更可靠

验证方法

  1. 用修复后的脚本重新创建实例或重启现有实例
  2. 检查Docker状态:systemctl status docker
  3. 查看初始化脚本输出:cat /home/ec2-user/out.txt
  4. 查看开机脚本输出(重启后):cat /home/ec2-user/boot_log.txt
  5. 排查问题看日志:cat /var/log/cloud-init.log 或 cat /var/log/cloud-init-output.log

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:35:27