AWS导入/导出任务的磁盘validation失败

我一直在尝试将Docker镜像转换为VMDK文件,以使用AWS的导入/导出function创buildAWS AMI。 为了那个原因:

  1. 我已经使用这个指南从我的DockerFile创build.img文件。

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

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

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

我的转换过程中有什么错误吗?

这可能是有帮助的,不确定为什么你会得到这个问题,但其他有问题的人已经在这里。

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

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

我已经联系了AWS支持人员关于同样的问题。 他们的回应如下:

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


运行用户数据有一个更简单的解决scheme。 就在容器内部运行的代码而言,容器或虚拟机之间没有区别。 代码认为它运行在一个普通的操作系统上。 因此,可以使用用户数据脚本在实例上执行相同的操作,而不是使用Dockerfile创buildDocker容器。 例如,使用Dockerfile中的ADD,它将获取文件并将其写入容器。 我们可以把这个文件从S3中提取出来,然后复制到实例需要去的地方。 它将在同一个地方,它住在容器中。 docker文件中的RUN指令将与用户数据脚本映射1对1,因为这些只是命令。 对于CMD指令,我们可以简单地通过用户数据来运行这个过程。 Docker卷是无关紧要的,因为我们可以访问实例的完整存储空间,所以您可以忽略卷的创build,只需要在任何文件需要的地方写入。 总之,您的用户数据脚本将replaceDockerfile来引导您的实例并运行您的应用程序。 而不是Dockerfile语法,您将使用Bash语法。 请看下面的模拟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. 确保文件“你好”是可执行的

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