1

我有以下 shell 脚本,它为/创建一个 Debian 基础aci容器:rktappC

#!/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

https://github.com/appc/spec/blob/master/spec/aci.md#image-layout

https://github.com/appc/spec/blob/master/examples/image.json

为什么不工作?

谢谢您的帮助!

4

1 回答 1

0

实际上,该错误是由tar存档中包含绝对路径引起的。

所以解决方案是cd在目录中而不是使用以 . 为前缀的绝对路径$MY_CHROOT

来源:https ://unix.stackexchange.com/a/59246/120771

于 2017-01-05T22:18:37.423 回答