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

Azure Debian 11 VM启动自动执行Docker安装脚本失败排查

解决Azure Debian 11自定义数据安装Docker失败的问题

问题根源分析

从cloud-init输出可定位核心问题:

  • APT锁冲突:VM启动时系统后台已有apt-get进程(PID 700)占用锁,导致脚本内apt命令无法执行
  • 依赖包适配问题:Debian 11默认源中无software-properties-common,对应Debian专属包为python3-software-properties;gnupg安装失败是因为源未完成更新
  • 命令缺失:add-apt-repository属于python3-software-properties包,默认未预装
  • Docker配置过时:使用已弃用的apt-key命令添加密钥,不符合Debian 11的源配置规范

修复后的自定义数据脚本

#!/bin/bash

# 等待系统APT锁释放,最多等待300秒(5分钟)
wait_for_apt_lock() {
    local timeout=300
    local start_time=$(date +%s)
    while true; do
        if fuser /var/lib/apt/lists/lock >/dev/null 2>&1; then
            echo "等待APT锁释放..."
            sleep 10
            if [ $(($(date +%s) - start_time)) -ge $timeout ]; then
                echo "等待APT锁超时,退出"
                exit 1
            fi
        else
            echo "APT锁已释放,继续执行"
            break
        fi
    done
}

echo "** 等待系统APT进程完成..."
wait_for_apt_lock

echo "** 更新软件源列表..."
sudo apt update -y

echo "** 安装基础依赖..."
# Debian 11中用python3-software-properties替代software-properties-common
sudo apt install -y apt-transport-https ca-certificates curl gnupg2 python3-software-properties

echo "** 添加Docker GPG密钥(使用官方推荐的keyring方式)..."
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "** 添加Docker软件源..."
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

echo "** 再次更新软件源列表..."
wait_for_apt_lock
sudo apt update -y

echo "** 安装Docker引擎..."
sudo apt install -y docker-ce docker-ce-cli containerd.io

echo "** Docker安装完成!验证版本:"
sudo docker --version

关键修改说明

  1. APT锁等待机制:添加循环等待函数,确保系统后台apt进程完成后再执行脚本命令,彻底避免锁冲突
  2. 依赖包适配:替换software-properties-common为Debian专属的python3-software-properties,同时安装gnupg2(Debian 11中gnupg为虚拟包,实际依赖gnupg2)
  3. Docker配置优化:采用Docker官方推荐的keyring方式存储GPG密钥,规避apt-key弃用警告;直接写入源配置文件替代add-apt-repository,提升可靠性
  4. 结果验证:安装完成后增加docker --version命令,方便在cloud-init日志中快速确认安装状态

验证方法

VM启动后,通过以下命令查看cloud-init执行日志:

cat /var/log/cloud-init-output.log

若安装成功,日志末尾会显示Docker版本信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:57:15