我一直在阅读 LXD 文档、博客和 stackexchange 答案,它们说 LXD 应该具有某种 init 语法,允许您在创建容器时将云配置数据传递给容器,但许多示例对我都不起作用。我尝试过以下设置配置文件的示例、使用传递数据的示例--config
、直接传递 yaml 数据的示例以及在 init 之后但在开始之前设置数据的示例。什么都没用。我正在粘贴我目前拥有的内容...有人能告诉我我做错了什么以及如何修复它吗?
我能想到的最基本的例子:
lxc delete -f x
cat << EOF >config.yml
#cloud-config
output: {all: '| tee -a /var/log/my-cloud-init-output.log'}
package_update: true
package_upgrade: true
package_reboot_if_required: true
packages:
- tree
runcmd:
- touch /run/cloud-config-did-run
EOF
lxc launch ubuntu: x --config=user.user-data="$(cat config.yml)"
sleep 5
lxc exec x -- bash -c "ls /run"
lxc exec x -- bash -c "tree /etc"
这应该输出到/var/log/my-cloud-init-output.log
,安装树并在 /run 中创建一个空文件。输出到/var/log/my-cloud-init-output.log
有效,但其他无效。日志没有显示任何特殊内容。
答案1
看来您需要等待更长时间。由于您已将package_update
和package_upgrade
指定为 true,因此在安装 tree 或执行 runcmd 之前,您实际上已经运行apt-get update; apt-get upgrade
(这可能需要超过 5 秒钟)。
您的确切命令对我有用,如果我sleep 5
用
lxc exec x -- bash -c "cloud-init status --wait"
sleep 2 # because of the `package_reboot_if_required: true`