我一直在尝试将Docker镜像转换为VMDK文件,以便使用AWS's Import/Export创建AWS AMI。为此:
我已使用this guide从我的DockerFile创建.img
文件。
现在,我正在使用此命令:VBoxManage convertfromraw --format VMDK disk.img disk.vmdk
将我的.img
文件转换为.vmdk
文件,因为IMG格式不受AWS服务支持。
但是,当我运行导入/导出服务时,它会给我这个错误:
"StatusMessage": "ClientError: Disk validation failed [Unsupported VMDK File Format]"
我的转换过程中是否有任何错误?
答案 0 :(得分:1)
这可能会有所帮助,不确定为什么你会遇到这个问题,但有问题的其他人已经被引导到了这里。
http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html
答案 1 :(得分:0)
我已就此问题与AWS支持人员联系。他们的回应如下:
不幸的是,VMIE不支持导入Docker镜像。 由于Docker镜像不是完全虚拟化的操作系统,因此您不会 即使导入成功,也可以启动此图像。
运行用户数据有一个更简单的解决方案。至于 在容器内运行的代码,没有区别 在容器或VM之间。该代码认为它是在常规运行 OS。因此,不是使用Dockerfile创建docker容器, 您可以使用用户数据脚本在实例上执行相同的操作。 例如,在Dockerfile中使用ADD,它会接收文件并写入它们 到容器。我们可以从S3中提取此文件并复制它 无论在哪个实例上都需要去。它会在同一个地方 它住在容器里。 Docker文件中的RUN指令 将使用用户数据脚本进行1对1的映射,因为这些只是简单的 命令。对于CMD指令,我们可以通过简单地运行该过程 用户数据。 Docker卷是无关紧要的,因为我们可以访问 完整存储实例,这样就可以忽略创建了 卷,只需写入任何文件需要去的地方。综上所述, 您的用户数据脚本将替换Dockerfile以进行引导 您的实例并运行您的应用程序。而不是Dockerfile 语法,您将使用Bash语法。请看下面的示例脚本 模仿您的Dockerfile。
#! /bin/bash
pip install --upgrade --user awscli
sudo aws s3 cp s3://example-bucket/hello /
sudo chmod +x /hello /hello
这是一个 脚本正在做什么的细分:
确保已安装aws cli
拉文件"你好"从S3存储桶中,将其写入' /'
确定文件"你好"是可执行的
- 醇>
执行hello这实质上是Dockerfile在容器中的作用,但不是从S3中拉出来,而是从 Dockerfile的位置。将文件添加到S3后,即可 轻松将其拉入用户数据脚本。运行这个,你甚至不会 需要创建自定义AMI,因为引导是在实例上完成的 启动后。要选择适当的操作系统,您可以启动 快速启动Ubuntu AMI并添加此用户数据脚本。另外,你 可以继续使用Docker进行测试而不会出现问题,您只需要制作即可 确定文件"你好"在您的Docker位置和。之间保持同步 S3桶。您可以使用S3 Sync命令完成此操作。
答案 2 :(得分:0)
我遇到类似以下错误:磁盘验证失败[我们无权访问指定的资源。 403 Forbidden]
我知道这个角色很好,因为过去我上传了大量图像。有时我会使用ova格式,有时是vmdk,它一直有效,直到停止工作。
如上所述,错误“磁盘验证失败”很有帮助。消息“无法访问资源”和“ 403禁止访问”使我需要2天的许可时间。最终,我听从了警告,并查看了磁盘验证,而不是许可。果然,尽管我的ova文件名中没有空格,但其中的vmdk文件名中却有空格,找不到资源。确保您提取了ova(或使用tar tvfz进行验证),并验证磁盘文件名中的文件名中没有空格。