我有以下shell脚本为aci
/ rkt
创建了一个Debian base appC
容器:
#!/bin/sh
set -e
# $ zcat debian.aci | tree | head
# $ rkt run debian.aci --insecure-options=image
export MY_CHROOT=/var/lib/container/aci/debian
mkdir -p $MY_CHROOT
debootstrap --verbose --arch=amd64 --include=iputils-ping,iproute --variant=minbase stable $MY_CHROOT/rootfs http://httpredir.debian.org/debian
cat > $MY_CHROOT/manifest <<EOF
{
"acKind": "ImageManifest",
"acVersion": "0.8.9",
"name": "debian",
"labels": [
{"name": "arch", "value": "amd64"},
{"name": "os", "value": "linux"},
{"name": "version", "value": "1.0.0"}
],
"app": {
"exec": [
"/bin/sh",
"echo",
"Hello, World from $MY_ENV_VAR!"
],
"user": "0",
"group": "0",
"environment": [
{
"name": "MY_ENV_VAR",
"value": "$(whoami)"
}
],
},
"annotations": {
"authors": "Istvan Lantos <email@addess.com>"
}
}
EOF
# use gpg to create a sig, but we'll skip that for now
tar cvvf - $MY_CHROOT/manifest $MY_CHROOT/rootfs | gzip -c > $MY_CHROOT/debian.aci
验证manifest
文件是否存在:
root@debian:/var/lib/container/aci/debian# zcat debian.aci | tree | head
.
├── debian.aci
├── manifest
└── rootfs
├── bin
│ ├── bash
│ ├── cat
│ ├── chacl
│ ├── chgrp
│ ├── chmod
当我尝试使用$ rkt run debian.aci --insecure-options=image
命令运行此容器时,出现以下错误:
run: missing manifest
我按照这些指南查看了文件结构:
https://github.com/appc/spec/blob/master/spec/aci.md#image-layout
https://github.com/appc/spec/blob/master/examples/image.json
为什么不工作?
感谢您的帮助!
答案 0 :(得分:0)
实际上,错误是由tar
引起的,其中包括存档中的绝对路径。
因此解决方案是目录中的cd
,而不是使用前缀为$MY_CHROOT
的绝对路径。