我刚开始使用Packer,并希望构建AMI和Docker镜像。
问题是 - Docker的Ubuntu映像没有sudo
,因此 - 构建失败并出现错误:
docker:/tmp/script_2085.sh:3:/tmp/script_2085.sh:sudo:not found
有没有办法添加一些"条件"一个shell
配置程序是否可以使用sudo
运行cmds,具体取决于builder
?
目前 - 我的模板有:
...
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y nginx"
]
}]
...
添加如下内容:
if which sudo; then sudo apt-get update && sudo apt-get install -y nginx; else apt-get update && apt-get install -y nginx; fi
看起来太奇怪的解决方案......我确定 - Packer有能力以更好的方式做到这一点。
答案 0 :(得分:1)
为什么不在docker框中安装sudo
?
您可以通过以下两种方式之一完成此任务:
sudo
,only
您可以使用配置程序中的only
参数在图片上安装sudo
:
...
"provisioners": [{
"type": "shell",
"inline": [
"apt-get install sudo"
],
"only": ["docker"]
},
... other provisioners here ...
]
...
打包程序文档中的更多信息here,在“特定构建版本上运行”下。
在第一个配置脚本的开头,添加命令以安装sudo
(如果尚未安装)。使用以下内容(取自here):
dpkg -l | grep -qw sudo || apt-get install sudo
检查已安装软件包的列表,如果sudo不存在则安装。
就个人而言,我倾向于选择第一个选项,因为它明确指出应该在某些方框上仅进行某些操作。没有混淆的余地。
分手记录
sudo
。apt-get update
。