3

我一直在尝试将 Docker 映像转换为 VMDK 文件,以使用AWS 的 Import/Export创建 AWS AMI 。为了那个原因:

  1. 我已使用本指南.img从我的 DockerFile创建文件。

  2. 现在,我正在使用此命令:VBoxManage convertfromraw --format VMDK disk.img disk.vmdk将我.img的文件转换.vmdk为 IMG 格式的文件,AWS 服务不支持。

但是,当我运行导入/导出服务时,它给了我这个错误:

"StatusMessage": "ClientError: Disk validation failed [Unsupported VMDK File Format]"

我在转换过程中有什么做错了吗?

4

3 回答 3

1

这可能会有所帮助,但不确定您遇到问题的确切原因,但其他有问题的人已被定向到此处。

http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html

使用 ec2 开发人员工具导入 vmdk 文件时出错

于 2017-07-18T15:36:50.643 回答
0

我已经就同样的问题联系了 AWS Support 人员。他们的回应如下:

不幸的是,VMIE 不支持导入 Docker 映像。由于 Docker 映像不是完全虚拟化的操作系统,因此即使导入成功,您也无法启动到该映像。


通过运行用户数据有一个更简单的解决方案。就在容器内运行的代码而言,容器或虚拟机之间没有区别。该代码认为它在常规操作系统上运行。因此,您可以使用用户数据脚本在实例上执行相同的操作,而不是使用 Dockerfile 创建 docker 容器。例如,使用 Dockerfile 中的 ADD,它会获取文件并将它们写入容器。我们可以从 S3 中提取此文件,并将其复制到实例需要去的任何地方。它将位于与容器中相同的位置。docker 文件中的 RUN 指令将与用户数据脚本一对一映射,因为这些只是命令。对于 CMD 指令,我们可以简单地通过用户数据运行该进程。Docker 卷无关紧要,因为我们可以访问实例的完整存储空间,所以您可以忽略卷的创建,而只需将任何文件写入任何需要去的地方。总之,您的用户数据脚本将替换 Dockerfile 以引导您的实例并运行您的应用程序。您将使用 Bash 语法,而不是 Dockerfile 语法。在下面查看模仿 Dockerfile 的示例脚本。

#! /bin/bash 
pip install --upgrade --user awscli 
sudo aws s3 cp s3://example-bucket/hello / 
sudo chmod +x /hello /hello 

以下是脚本正在执行的操作的细分:

  1. 确保安装了 aws cli

  2. 从 S3 存储桶中提取文件“hello”,并将其写入“/”

  3. 确保文件“hello”是可执行的

  4. 执行 hello 这本质上是 Dockerfile 在容器中所做的事情,但是它不是从 S3 拉取,而是从 Dockerfile 的位置拉取它。将文件添加到 S3 后,您可以轻松地将其拉入用户数据脚本。运行它,您甚至不需要创建自定义 AMI,因为引导是在启动后在实例上完成的。要选择适当的操作系统,您可以启动 QuickStart Ubuntu AMI 并添加此用户数据脚本。此外,您可以继续使用 Docker 进行测试而不会出现问题,您只需要确保文件“hello”在您的 Docker 位置和 S3 存储桶之间同步。您可以使用 S3 Sync 命令来完成此操作。

于 2017-07-19T12:54:41.077 回答
0

我收到如下错误:磁盘验证失败 [我们无权访问指定的资源。第403章 禁止】

我知道这个角色很好,因为我过去上传了很多图片。有时我会使用 ova 格式,有时会使用 vmdk,它总是可以工作,直到它停止工作。

如上所述,错误“磁盘验证失败”很有帮助。消息“无法访问资源”和“403 禁止”让我查看了 2 天的权限。最终,我听取了警告并查看了磁盘验证,而不是权限。果然,虽然我的ova文件名没有空格,但是里面的vmdk文件名有空格,找不到资源。确保您提取您的 ova(或使用 tar tvfz 验证)并验证磁盘文件名中的文件名中没有空格。

于 2020-06-21T01:44:48.117 回答